2013-10-23 204 views
0

我想知道是否有某種方法暫時暫停計時器,然後重新啓動它。暫時暫停System.Timers.Timer在C#

我有一個方法「DoSomething()」,它可以從一個定時器事件中或稱爲「Chooser()」的不同方法中調用。應該從定時器或Chooser()中調用DoSomething(),但不應該調用兩次。

問題是Chooser()需要一些時間來決定是否應該調用DoSomething()。當Chooser()決定是否應該調用DoSomething()時,DoSomething()不應該被調用。這會導致DoSomething()被調用兩次。

如果選擇器()確實選擇調用DoSomething(),它將禁用定時器。同樣,如果定時器調用DoSomething(),它將禁用Chooser()中的代碼。

我想在選擇器()的開始處移除timer eventhandler,然後在Chooser()的末尾重新添加它。但是,這不起作用,因爲計時器可能會在Chooser()運行時觸發事件,並且不會處理該事件。

我不認爲我可以使用鎖,因爲我只想調用DoSomething()一次。

如果我可以在Chooser()的開頭暫停計時器,然後在最後再次啓動計時器,這將是理想的,但我不認爲存在這種可能性。

我可以添加一個標誌,但我想知道是否有更好的。

+0

有一個小窗口,可以使定時器在停止後觸發。考慮你的解決方案的可能性。 – hatchet

回答

0

在鎖定下設置一個標誌,表示DoSomething正在運行。還在鎖定下,測試該標誌是否已設置。如果是的話,只需返回並無所作爲。

不可能可靠地停止定時器。即使同時停止計時器,也可以任意傳送滴答事件(同時多次滴答)。

+0

是的,我想我只需要使用標誌。謝謝。 – user2445507