我在C#中编写一个MDI应用程序,它包含两个通过DLL引用的子表单(独立项目添加到引用中)。 一个子表单(称为form1)使用计时器基于图形对象执行动画。这个项目(子form1)工作正常,直到加载另一个子窗体(称为form2)。会发生什么是第一个窗体(form1)上的动画停止,但当我关闭第二个子窗体(form2)时,动画继续没有问题。
我在form2中使用此代码:
private void FlyingBeeForm_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Graphics;
DrawImages(g);
System.Threading.Thread.Sleep(50);
this.Invalidate();
}
答案 0 :(得分:1)
当间隔期满时,计时器将通过Windows发出的通知继续运行。然而,这是一个非常低优先级的通知,只有在没有其他工作需要完成时才能获得。
您现在应该看到Paint事件处理程序的问题。首先,您可以通过不断睡眠来阻止任何工作完成。然后确保通过调用Invalidate()来完成始终工作。因此,Windows会生成一个新的绘制事件,并且永远不会到达可以传递计时器事件的状态。
您必须删除Sleep和Invalidate呼叫。而是使用50毫秒的定时器。只需在其Tick事件处理程序中调用Invalidate()。