2010-04-07 36 views
1

我有一些代碼正在運行的背景工作者我想要一些特定的代碼,它顯示了一些GUI在主線程上下文中運行(2個原因1。它應該是阻塞的2.我知道這是處理來自後臺工作人員的GUI控件的問題) 我引發一個事件傳遞類並從mainForm中偵聽事件,我檢查是否需要調用並重新調用。然後調用我想要在主線程中運行的實例的公共方法。我有幾個問題:委託代碼從主線程運行主線程來處理gui

  1. 有處理它們在主線程的backgoundworker背景下創建的數據成員的任何問題 - 供讀取和chaning valuse

  2. 有任何設計圖案的這樣的問題?理想情況下,我想運行任何代表 - 任何返回值和幾個genric參數 - 作爲在委託中構建的func - 這是有問題的,因爲這意味着如果我想要支持多達3個帶或不帶返回值的參數,我必須有6個事件和6個聽衆實際上是一樣的 - 有沒有人有如何做到這一點的想法是正確的? 謝謝!

回答

1

我剛剛寫了一個類似的問題。

我使用這些東西的線程。

的地方在我的代碼:

// Definition 
private static Thread TH; 

....

// When process starts 
TH = new Thread(new ThreadStart(Splash_MyCallBack)); 
TH.Start(); 

....

// This method starts the form that shows progress and other data 
static private void Splash_MyCallBack() 
{ 
    frmLoading FL; 

    FL = new frmLoading(); 

    FL.ShowDialog(); 

} /* Splash_MyCallBack*/ 

// Your process calls Splash_Stop when it is done. 
static public void Splash_Stop() 
{ 
    TH.Abort(); 
} /* Splash_Stop*/ 

frmLoading進行可視化的東西,而在後臺我有一個非常處理器密集型的任務。 我的進程向接口報告其進度。 frmLoading實現該接口,因此是意識到這一點,並能顯示whaever需要它(在我的情況2進度條) 僅臨屋的缺點是,frmLoading必須在構造函數中有這樣的:

Control.CheckForIllegalCrossThreadCalls= false; 

這可能是危險的在某些情況下(不是我的情況)。

我認爲主進程調用一個接口來更新進度的事實,而真實接口消耗的是一種模式。 希望這可以幫助,如果你喜歡,我可以添加更多的東西。

Regards,

1

要回答你的第一個問題:

不應該有操作在後臺工作人員創建的數據的任何問題。我已經在幾個應用程序中完成了它,並沒有遇到任何問題。

相關問題