c# 桌面飘雪程序 在窗体重绘 无法在form_paint 事件中手动释放 Graphics对象
c#桌面飘雪程序在窗体重绘的时候form_paint事件中为什么用完Graphics对象手动调用dispose()函数释放后会提示运行会出现参数错误这是为什么privat...
c# 桌面飘雪程序 在窗体重绘的时候 form_paint事件中 为什么用完Graphics 对象 手动调用dispose()函数释放后会提示 运行会出现参数错误 这是为什么
private void OnTick(object sender, EventArgs args)
{
Tick++;
if (Tick % 3 == 0 && Random.NextDouble() < 0.70)
{
SnowFlake s = new SnowFlake();
s.X = Random.Next(-50, Width + 50);
s.Y = Random.Next(-20, -7);
s.XVelocity = (float)(Random.NextDouble() - 0.5f) * 2f;
s.YVelocity = (float)(Random.NextDouble() * 3) + 1f;
s.Rotation = Random.Next(0, 359);
s.RotVelocity = Random.Next(-3, 3) * 2;
if (s.RotVelocity == 0)
{
s.RotVelocity = 3;
}
// s.Scale = (float)(Random.NextDouble() / 2) + 0.75f;
s.Scale = (float)(Random.NextDouble() / 2) + 0.5f;
SnowFlakes.Add(s);
}
//需要移除的雪花。
List<SnowFlake> del = new List<SnowFlake>();
foreach (SnowFlake s in SnowFlakes)
{
s.X += s.XVelocity;
s.Y += s.YVelocity;
s.Rotation += s.RotVelocity;
s.XVelocity += ((float)Random.NextDouble() - 0.5f) * 0.7f;
s.XVelocity = Math.Max(s.XVelocity, -2f);
s.XVelocity = Math.Min(s.XVelocity, +2f);
if (s.Y > Height - 50)
{
del.Add(s);
// SnowFlakes.Remove(s);
}
}
//删除
foreach (SnowFlake s in del)
{
SnowFlakes.Remove(s);
}
//刷新
Refresh();
}
private void MainForm_Paint(object sender, PaintEventArgs e)
{
// 绘制满天飞舞的雪花。
Graphics g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias; //高速绘制,可以视硬件情况改为高质量绘图。
foreach (SnowFlake s in SnowFlakes)
{
g.ResetTransform();
g.TranslateTransform(-16, -16, MatrixOrder.Append); //平移
g.ScaleTransform(s.Scale, s.Scale, MatrixOrder.Append); //缩放
g.RotateTransform(s.Rotation, MatrixOrder.Append); //旋转
g.TranslateTransform(s.X, s.Y, MatrixOrder.Append); //平移
g.DrawImage(Snow, 0, 0); //绘制
}
// g.Dispose(); //这里释放会出错
}
}
} 展开
private void OnTick(object sender, EventArgs args)
{
Tick++;
if (Tick % 3 == 0 && Random.NextDouble() < 0.70)
{
SnowFlake s = new SnowFlake();
s.X = Random.Next(-50, Width + 50);
s.Y = Random.Next(-20, -7);
s.XVelocity = (float)(Random.NextDouble() - 0.5f) * 2f;
s.YVelocity = (float)(Random.NextDouble() * 3) + 1f;
s.Rotation = Random.Next(0, 359);
s.RotVelocity = Random.Next(-3, 3) * 2;
if (s.RotVelocity == 0)
{
s.RotVelocity = 3;
}
// s.Scale = (float)(Random.NextDouble() / 2) + 0.75f;
s.Scale = (float)(Random.NextDouble() / 2) + 0.5f;
SnowFlakes.Add(s);
}
//需要移除的雪花。
List<SnowFlake> del = new List<SnowFlake>();
foreach (SnowFlake s in SnowFlakes)
{
s.X += s.XVelocity;
s.Y += s.YVelocity;
s.Rotation += s.RotVelocity;
s.XVelocity += ((float)Random.NextDouble() - 0.5f) * 0.7f;
s.XVelocity = Math.Max(s.XVelocity, -2f);
s.XVelocity = Math.Min(s.XVelocity, +2f);
if (s.Y > Height - 50)
{
del.Add(s);
// SnowFlakes.Remove(s);
}
}
//删除
foreach (SnowFlake s in del)
{
SnowFlakes.Remove(s);
}
//刷新
Refresh();
}
private void MainForm_Paint(object sender, PaintEventArgs e)
{
// 绘制满天飞舞的雪花。
Graphics g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias; //高速绘制,可以视硬件情况改为高质量绘图。
foreach (SnowFlake s in SnowFlakes)
{
g.ResetTransform();
g.TranslateTransform(-16, -16, MatrixOrder.Append); //平移
g.ScaleTransform(s.Scale, s.Scale, MatrixOrder.Append); //缩放
g.RotateTransform(s.Rotation, MatrixOrder.Append); //旋转
g.TranslateTransform(s.X, s.Y, MatrixOrder.Append); //平移
g.DrawImage(Snow, 0, 0); //绘制
}
// g.Dispose(); //这里释放会出错
}
}
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询