为什么Windows窗体计时器停止工作

本文关键字:停止工作 计时器 窗体 Windows 为什么 | 更新日期: 2023-09-27 18:16:10

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

简而言之,重新创建一个表单对象在某种程度上禁用了计时器。请建议。

代码充满了反射和展开。我会尽量多发一些。

创建新表单对象的代码

Form f = ReflectUtils.CreateClassFromAssembly( _TheAssembly, FormName ) as Form;
if ( null == f )
{
    throw new ApplicationException( "Failed to create Form: {");
}
_GUICancelEventHandler = new CancelEventHandler( GUIControlForm_Cancel );
f.Closing += _GUICancelEventHandler;
f.Show();

销毁表单

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);

inside formLoad event

timer1.Start();

为什么Windows窗体计时器停止工作

如果你打算终止你的表单,最好让计时器独立于你的表单实例。

我建议,

与其在表单中使用计时器,不如在一个单独的类中维护计时器,这样它就不会与你要杀死的表单一起被处理。

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