2010-11-16 86 views
1

我可以在線程上成功創建一個計時器時鐘嗎?我正在創建一個,但它似乎並沒有那麼好。我的應用程序是一個多線程應用程序,必須在某個事件發生時在線程上啓動一個定時器。計時器放置在每個客戶端連接中。時鐘不工作,直到我關閉我的winform(我不知道爲什麼)。有什麼特別的,我應該知道線程中的定時器?定時器線程?

這裏是我的計時器代碼:

timer1.Interval = 1000; 
timer1.Tick += new EventHandler(timer_Tick); 
timer1.Enabled = true; 
timer1.Start(); 
+0

'timer1.Enabled'不一樣'timer1.Start()',所以你只需要其中的一個。嘗試在線程之外的某處配置定時器,並使用'this.Invoke'來調用'timer1.Start()'。 – 2010-11-16 08:57:15

+0

這裏忽略的一個有趣的細節是*在哪裏,何時以及如何創建計時器*。代碼示例僅顯示它是如何啓動的。 – 2010-11-16 08:57:40

+0

@Dittmar:我需要一個定時器,我接受每個客戶端連接,所以我必須在定義我的連接的類中聲明它(很可能)。 @ fredrik我爲每個連接聲明計時器,當我創建類 – Alex 2010-11-16 09:01:33

回答

4

你可以嘗試使用System.Threading.Timer,這基本上是一個定時器,它是在一個單獨的線程。您也可以考慮使用永不開火的WaitHandle,然後使用WaitOne(1000, false)等待一秒鐘。

+0

因此我的線程計時器不應該工作? – Alex 2010-11-16 09:14:56

+0

好吧,我其實不知道:-)我會嘗試使用'System.Threading.Timer',因爲它不依賴Windows窗體,比如'System.Windows.Forms.Timer' - 你永遠不知道。 ..無論如何,當你在線程代碼中創建定時器時,如果您切換類,則沒有太多的開銷。 – 2010-11-16 09:50:32

+0

好吧,我會給Threading.Timer一個去。謝謝! – Alex 2010-11-16 10:02:22

0

試試這個:

public void EnableTimer() 
     { 
      if (this.InvokeRequired) 
       this.Invoke(new Action(EnableTimer)); 
      else 
       this.timer1.Enabled = true; 
     }