2013-06-27 45 views
0

我剛開始一個類似的線程,但我覺得這是一個單獨的問題,所以在這裏!VB.NET使用BackgroundWorker來防止UI凍結 - 替代方法?

我正在使用BackgroundWorker來防止我的UI鎖定,而我執行一些文件操作。雖然這已經解決了問題,但是由於調用BackgroundWorker的函數需要根據BackgroundWorker的結果返回true/false,所以它被創建爲另一個。

很明顯,有辦法解決這個問題 - 使用循環來檢查工作人員是否忙碌,但這似乎是一種特別糟糕的做事方式。我已經做了一些進一步的閱讀,並且很多人都說如果我需要等到BackgroundWorker完成,我首先會打敗使用它的目的。

我在這裏有什麼選擇?在函數中使用BackgroundWorker是否存在「正確」方式,並且仍然根據BackgroundWorker正在執行的工作結果報告返回值,還是有一種更簡單的方法可以讓我的UI保持響應,而其他內容則會上?

回答

-1

設置BackgroundWorker.WorkerReportsProgress = True啓動BackgroundWorker時。

在您的DoWork方法中調用BackgroundWorker.ReportProgress,並在您的主線程中處理BackgroundWorker.ProgressChanged事件。

+0

我已經有到位的,但我的代碼看起來是這樣的:) 'code' 公共功能DoStuff(布爾 BWorker.RunWorkerAsync() 「如果BWorker工作返回true,false,如果破的東西 End Function 'code' 所以我需要DoStuff函數根據BackgroundWorker的結果返回true或false。 – synoptica

+0

爲此,只需在主線程中處理'BackgroundWorker.RunWorkerCompleted'並檢查'e.Cancelled'的值。要設置該值,只要在「DoWork」中使用'e.Cancel = True',如果長進程失敗。 – SSS

+1

否則,您可以嘗試VB2012的新異步/等待功能http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx – SSS