2013-08-30 41 views
-3

我正在使用System.Times.Timer監視進程,這將定期調用一個方法。但是我面臨的一個問題是調用是使用多線程完成的。如果我刪除定時器,那麼它將作爲STA工作。使用定時器,當我調用ElapsedMethod來調用另一個函數時,它將更改爲MTA,從而在最後導致異常。定時器和C#中的多線程#

+4

什麼是例外? – Ehsan

+5

這是什麼問題? – Gareth

回答

2

System.Timers.Timer更改爲System.Windows.Forms.Timer並且所有操作都將在UI線程上執行。

如果你不想這樣做,那麼你可以將SynchronizingObject設置爲this。因爲當SynchronizingObject爲null時,處理Elapsed事件的方法在系統線程池的線程上調用

+0

這就是'System.Windows.Forms.Timer' –

+0

@JimMischel謝謝更新。 – Ehsan

2

System.Timers.Timer有一個SynchronizingObject屬性,您可以將該屬性設置爲將事件封送到UI線程。將其設置爲表單。那就是:

System.Timers.Timer Timer1 = new System.Timers.Timer(); 
Timer1.SynchronizingObject = this; 
// add other Timer initialization here