2015-04-07 46 views
0

我使用System.Timers做出Timer刪除事件形式定時器計時

Timer timer = new Timer(1000); 
timer.Elapsed += Func; 
timer.Elapsed += Func2; 
timer.Start(); 

到目前爲止,一切正常,但是當我想退訂Func2這是行不通的,它不斷給你打電話Func2一樣,如果我沒有取消訂閱它:

timer.Elapsed -= Func2; 

我做錯了,如果是的話,我該怎麼做才能正確?

+2

該代碼應該工作,以消除Func2。你能否詳細說明它究竟做錯了什麼?拋出一個錯誤,仍然在每個時間間隔調用Func2等? – Travis

+0

是啊,它一直在調用'Func2',就像我沒有刪除它。 – Abanoub

+0

你在哪裏拆卸? – Travis

回答

0

檢查InvokeRequired後,是否使用BeginInvoke取消訂閱。似乎你沒有在正確的線程上做它。

+0

我相信因爲System.Threading.Timer不是一個表單控件,它可以被操縱交叉線程(實際上甚至沒有一個InvokeRequired屬性)。如果這是一個跨線程訪問問題,它將拋出異常而不是忽略刪除。 – Travis

+0

他沒有使用System.Threading.Timer他正在使用System.Timers.Timer。在過去的情況下,我看到異常不會被拋出,但行動被忽略。請參考這裏,一個很好的解釋https://msdn.microsoft.com/en-us/magazine/cc164015.aspx#S2 – eYe

+0

對不起,@Chm,我一定誤會原來。我的錯。 – Travis