C# 为什么windows窗体计时器停止工作?

C# 为什么windows窗体计时器停止工作?,c#,winforms,C#,Winforms,在基于C#的应用程序中,我在应用程序中创建了一个新表单,它有自己的System.Forms.Timer对象。当我第一次创建表单时,一切正常,我收到计时器滴答声,没有问题。在某些情况下,我必须终止表单并创建一个新的(相同的)表单对象。表单是以类似的方式创建的。表单已正确加载,计时器已正确初始化,但计时器未勾选。我尝试了不同的方法,比如停止和处理计时器对象,以及在FormLoad中创建一个新对象,但都没有成功。我的朋友建议我的新表单对象可能不接收Windows计时器消息(WM_timer)。如何检查

在基于C#的应用程序中,我在应用程序中创建了一个新表单,它有自己的System.Forms.Timer对象。当我第一次创建表单时,一切正常,我收到计时器滴答声,没有问题。在某些情况下,我必须终止表单并创建一个新的(相同的)表单对象。表单是以类似的方式创建的。表单已正确加载,计时器已正确初始化,但计时器未勾选。我尝试了不同的方法,比如停止和处理计时器对象,以及在FormLoad中创建一个新对象,但都没有成功。我的朋友建议我的新表单对象可能不接收Windows计时器消息(WM_timer)。如何检查消息循环在新表单对象中是否正常工作?我做错了什么

简而言之,重新创建表单对象会以某种方式禁用计时器计时。请告知

代码充满了反射和扩展。我会尽可能多地发帖

创建新表单对象的代码

销毁表单的代码

应用程序使用相同的代码创建新的表单对象

计时器的设计器代码

this.timer1 = new System.Windows.Forms.Timer(this.components);
this.timer1.Interval = 500;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
内部formLoad事件


希望这能有所帮助。

如果要终止表单,最好让计时器独立于表单实例

我建议,

不要让计时器出现在表单中,而是在一个单独的类中维护计时器,这样它就不会与要杀死的表单一起处理


使用该类的对象访问计时器(启动、停止、重置、处理事件)

请显示到目前为止的代码。我已经添加了代码。由于它的实施,我不确定它会有多大帮助。我想我只是想了解一下windows窗体计时器的一般行为,如果有什么明显遗漏的话。谢谢。我想我可以用
System.Timers.timer
类对象替换窗体计时器。将尝试这种方法。@Alok不仅替换,而且正如Bharath所说,将其移出到自己的类中,单独实例化。如果它仍然在表单中,它会随着表单一起消失。只要在创建新表单实例时正确创建它,如果它随着表单一起消失,我就可以了。我不明白如果正确创建了一个新的计时器对象,为什么计时器不能工作。我想你在新实例中启动计时器之前忘了启用它。在启动计时器之前,请尝试将其包含在表单加载中。”timer.Enabled=true'
f.Close();
f.Dispose();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.timer1.Interval = 500;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
timer1.Start();