2009-07-18 52 views
1

如何使用戶控件在其自己的線程上運行?如何使用戶控件在其自己的線程上運行

例如通過在用戶控件下面的代碼,怎麼把用戶控制使用主應用程序線程使其主線程睡眠

Thread.Sleep(TimeSpan.FromMinutes(2)); 
+1

什麼樣的用戶控制?的WinForms? – 2009-07-18 19:21:10

回答

3

用戶控件需要在UI線程上運行,因爲這是Windows API的限制。如果您嘗試使用來自其他線程的Windows窗體控件,則會收到異常。

您可以在另一個線程中運行其他代碼,但使用UI線程來更新控件。你可以爲此使用BackgroundWorker。或者,您可以使用控件實例上的InvokeRequired和Invoke或BeginInvoke方法讓它在UI線程上執行代碼。


你提到你想要使用互斥鎖。互斥體是爲了避免多個線程同時訪問資源。如果你所有的代碼都在同一個線程中運行,那麼你根本就不需要鎖。

2

對象真的不「跑」本身 - 方法是在一個線程中執行。

現在如果你想要一個特定的方法在不同的線程中執行,你需要創建一個新的線程,明確地使用線程池,或者使用一些爲你使用線程池的東西 - 比如BackgroundWorker

當你想睡兩分鐘時,你在做什麼?你可以通過設置一個計時器在兩分鐘內觸發(在UI線程中)來避免睡眠嗎?如果這是一些長時間運行的過程的一部分,則應該使用BackgroundWorker或其他一些在不同線程上執行的方式,但控制本身仍然處理UI線程中的更新和事件。

相關問題