下面的代码显示了一个计时器,每100*1000(毫秒)打勾以显示一个弹出消息进行注册.下面的代码正在运行,但遗憾的是我的应用程序在一段时间后会挂起.
我已经在google和stackoverflow中搜索了这个答案.但我找不到正确的答案,让我的应用程序工作而不会被绞死.
private System.Timers.Timer register_Timer = new System.Timers.Timer();
register_Timer.Interval = (100 * 1000);
register_Timer.Elapsed += new ElapsedEventHandler(register_Timer_Tick);
register_Timer.SynchronizingObject = this;
register_Timer.AutoReset = true;
register_Timer.Enabled = true;
System.GC.KeepAlive(register_Timer);
private void register_Timer_Tick(object sender, EventArgs e)
{
//Pop up to show register message
}
Run Code Online (Sandbox Code Playgroud)
register_Timer.SynchronizingObject = this;
Run Code Online (Sandbox Code Playgroud)
这完全违背了使用System.Timers.Timer的原因.它可以防止在线程池线程上引发Elapsed事件处理程序,该属性确保它将在UI线程上运行.这是你想要的.
但是你仍然可以获得Timer类的所有缺点.特别是在没有诊断的情况下吞咽异常的习惯非常难看.除了在表格关闭后继续提高Elapsed事件,确保不会发生这是一个非常难以解决的问题,有两个固有的竞争条件..NET 1.0有一些与线程相关的设计错误,这就是其中之一.
只是不要这样做,而是使用System.Windows.Forms.Timer.它会像你的计时器一样工作,减去所有的缺点.
| 归档时间: |
|
| 查看次数: |
2168 次 |
| 最近记录: |