2014-04-21 66 views
0

我想要一個後臺工作與運行在主線程中的微調運行,我想等到後臺工作完成。目前我可以有一個或另一個。我嘗試過使用自動重置事件,但鎖定主線程,因此不顯示微調。是否有類似於不鎖定主UI的自動重置事件?等到一個後臺工作者完成沒有鎖定主線程

下面是我的一些代碼

BackgroundWorker _bWorker = new BackgroundWorker(); 
_bWorker.DoWork += _bWorker_DoWork ; 
_bWorker.RunWorkerCompleted += _bWorker_RunWorkerCompleted; 

AutoResetEvent are = new AutoResetEvent(false); 

_bWorker.RunWorkerAsync(); 

// Wait here until the background worker is finished 
are.WaitOne(); 

... 

private void _bWorker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    // Show spinner 
    WaitSpinnerAdornerText = "Working"; 
    IsWaitSpinnerVisible = true; 

    ... 

    are.Set(); 
} 


private void _bWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    IsWaitSpinnerVisible = false; 
    ... 
} 

任何想法?歡迎任何幫助!提前致謝。

+0

您正在使用哪個版本的.net? –

+0

嘗試將are.Set()移動到已完成 – Paparazzi

+0

@Sriram我正在使用.NET 4.0 – Miguel

回答

2

使用BackgroundWorker的關鍵在於您不需要等待它完成。只需刪除AutoResetEvent並觸發_RunWorkerCompletedRunWorkerAsync之後當前所在的任何邏輯。

或者,您可以查看使用任務並行庫並讓該代碼作爲延續運行。

最後,您可以考慮使用.net 4.0的異步CTP,其中async/await功能的行爲與您想要編寫代碼的方式幾乎完全相同。

相關問題