两个MDI儿童形式相互干扰

时间:2012-05-08 14:32:24

标签: c# animation mdichild

我在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(); 
}

1 个答案:

答案 0 :(得分:1)

当间隔期满时,计时器将通过Windows发出的通知继续运行。然而,这是一个非常低优先级的通知,只有在没有其他工作需要完成时才能获得。

您现在应该看到Paint事件处理程序的问题。首先,您可以通过不断睡眠来阻止任何工作完成。然后确保通过调用Invalidate()来完成始终工作。因此,Windows会生成一个新的绘制事件,并且永远不会到达可以传递计时器事件的状态。

您必须删除Sleep和Invalidate呼叫。而是使用50毫秒的定时器。只需在其Tick事件处理程序中调用Invalidate()。