2010年7月16日 星期五

如何在Thread中啟動Timer?

1. 當我們從開發環境的ToolBox上拖曳一個Timer到Form上系統所建立的是 System.Windows.Forms.Timer,若是要在Thread中啟動該Timer,則必須使用Delegate。

delegate void TimerEnableCallback(System.Windows.Forms.Timer timer,bool enable);
private void TimerEnable(System.Windows.Forms.Timer timer, bool enable)
{
try
{
if (this.InvokeRequired)
{
TimerEnableCallback d = new TimerEnableCallback(TimerEnable);
this.Invoke(d, new Object[] { timer,enable });
}
else
{
if (enable)
{
timer.Enabled = true;
timer.Start();
}
else
{
timer.Stop();
timer.Enabled = false;
}
}
}
catch (Exception ex)
{
throw ex;
}
}

依據經驗如果要停止Timer是可以不使用Delegate,但是如果要啟動就要使用Delegate。
如果沒有使用Delegate做Timer啟動,系統也不會發出任何Error訊息,開發者只是會發現Timer沒有啟動而已。

2. 此外,還有兩種Timer可以使用,分別為 System.Timers.Timer、System.ThreadingSystem.Threading,這類的Timer的Handler是與Form本身不同執行緒的,所以會有執行緒問題,需要用Delegate去解決。(For .Net Framswork 2.0)

沒有留言:

張貼留言