2011-07-15 47 views
1

我有一個MDI子窗體,其中包含一個DataGridView,它通過一個Timer持續更新。我不希望在Timer時間間隔觸發的SQL操作與其他操作發生衝突,因此想要爲此MDI子窗體使用不同的線程。想要在不同的線程中打開MDI子項

我想知道創建線程是什麼。我從MDI父窗體的Load事件打開此窗體。我應該在那個時候創建​​一個線程,並將MDI子代的所有加載代碼放在那裏或其他地方?

+1

這個答案當然是你**不**。所有表單都需要顯示在單個線程上,通常稱爲「UI線程」。將*處理*分成單獨的線程,而不是整個表單。 –

回答

2

你不能在另一個線程上做任何UI事情。一個進程只能得到一個UI線程,並且所有UI代碼都應該在該線程上運行(嘗試在不同線程上執行UI事件將導致異常)。

你應該做的是讓計時器在UI線程上運行,並從那裏轉到後臺線程。隨着數據的返回,請注意您需要使用分派器將您的結果同步到UI線程。

相關問題