2011-06-11 49 views
0

我有一個後臺工作人員,我試圖讓它創建一個窗體的實例,但我不希望後臺工作線程自己該對象,但希望主線程擁有它。我從哪裏開始呢?使用backgroundworker在主線程創建WinForm

+0

這看起來像一個非常奇怪的(=錯)設計。爲什麼一個Bgw創建一個表單? – 2011-06-11 10:06:26

+0

當我的應用程序加載時,我顯示一個特定的表單,創建一個互斥體並啓動一個後臺worker上的TCP偵聽器。如果第二個實例由於無法獲得相同的互斥量而被加載,它會通過TCP監聽器告訴第一個實例該應用程序試圖再次加載。然後,我想讓後臺工作者(不再鎖定)告訴主線程顯示某種形式。 – R4D4 2011-06-11 10:25:54

回答

1

您可以使用Invoke和BeginInvoke函數來獲取要在GUI線程上執行的代碼。你可以讓你的另一個線程提出一個事件,然後在你的主窗體中處理它,然後你的主窗體可以調用這個回調到它自己的線程上(使用InvokeRequired然後Invoke)來啓動新窗體。

如果您使用的是後臺工作人員,您可以將OnProgressChanged方法用於通知您的應用程序執行某些操作。

而且,看看這個excellent book

+0

謝謝,我會看到Invoke如何去讓你知道。 – R4D4 2011-06-11 10:30:29

相關問題