2012-01-02 100 views
4

我想在另一個完成後啓動BackgroundWorker。我不知道如何爲它編寫代碼,所以我沒有什麼可展示的。在另一個完成後運行BackgroundWorker

我想過寫在RunWorkerCompleted,但這似乎是錯誤的地方把邏輯啓動另一名工人。

我該在哪裏以及如何做到這一點?

基本上,我想使用同一個工人,但要做別的事情。就像在第1步中分析文件中的數據一樣,在第2步中,在第1步完成後,它應該將解析的數據從內存寫入數據庫。

+2

開始另一個BGW沒有意義。在第一步完成後,只需要第一個執行step2代碼即可。你甚至可以直接調用它的DoWork()方法。 – 2012-01-02 16:41:36

回答

4

您可以改爲使用.NET 4.0 Task類,然後使用Task.ContinueWith排隊更多工作。

+0

不幸的是,我只在應用程序將運行的機器上安裝了.NET-3.5 ... – 2012-01-02 16:44:33

3

可能最好使用兩個不同的BackgroundWorker組件。在第一個RunWorkerCompleted事件處理程序中啓動第二個。這似乎是一種非常合理的做事方式。只是不要試圖用一個BackgroundWorker做到這一點。

作爲Tudor mentioned,你可以使用Task,但是你會失去BackgroundWorker的便利,它有其熟悉的面向事件的接口,進度報告等等。

3

從您的描述看來,這些步驟似乎是相關的並且是連續的,所以我將它作爲單個BGW執行,其中DoWork執行兩個步驟,在解析步驟和寫入數據庫步驟之間調用ReportProgress

然後,您可以處理在UI線程上運行的ProgressChanged事件,以在分析步驟完成後執行任何邏輯,從而知道工作人員已在寫入數據庫。

ReportProgress接受一個整數來標識後臺任務和可選自定義對象的完成百分比。因此,在您的ProgressChanged處理程序中,您需要具有解釋此進度信息的邏輯。在這種情況下,作爲一項兩步工作,您可以致電ReportProgress(50)

+0

ReportProgress不僅接受整數。接受對象的重載有助於提供豐富的反饋。 – 2012-01-02 17:27:06

+0

你說得對,我查了MSDN,完全錯過了過載。答案已更新。 – 2012-01-02 17:51:39

相關問題