我想在另一個完成後啓動BackgroundWorker
。我不知道如何爲它編寫代碼,所以我沒有什麼可展示的。在另一個完成後運行BackgroundWorker
我想過寫在RunWorkerCompleted
,但這似乎是錯誤的地方把邏輯啓動另一名工人。
我該在哪裏以及如何做到這一點?
基本上,我想使用同一個工人,但要做別的事情。就像在第1步中分析文件中的數據一樣,在第2步中,在第1步完成後,它應該將解析的數據從內存寫入數據庫。
我想在另一個完成後啓動BackgroundWorker
。我不知道如何爲它編寫代碼,所以我沒有什麼可展示的。在另一個完成後運行BackgroundWorker
我想過寫在RunWorkerCompleted
,但這似乎是錯誤的地方把邏輯啓動另一名工人。
我該在哪裏以及如何做到這一點?
基本上,我想使用同一個工人,但要做別的事情。就像在第1步中分析文件中的數據一樣,在第2步中,在第1步完成後,它應該將解析的數據從內存寫入數據庫。
如果使用第三方庫進行作業調度是可以接受的,請查看Quartz.NET以及它的作業監聽器機制http://quartznet.sourceforge.net/tutorial/lesson_7.html。如果你想自己實現它,我會使用一個BackgroundWorker
來執行一組作業,組織成一個責任鏈,你可以在這裏閱讀更多關於這個模式http://dofactory.com/Patterns/PatternChain.aspx。
您可以改爲使用.NET 4.0 Task類,然後使用Task.ContinueWith排隊更多工作。
不幸的是,我只在應用程序將運行的機器上安裝了.NET-3.5 ... – 2012-01-02 16:44:33
可能最好使用兩個不同的BackgroundWorker
組件。在第一個RunWorkerCompleted
事件處理程序中啓動第二個。這似乎是一種非常合理的做事方式。只是不要試圖用一個BackgroundWorker
做到這一點。
作爲Tudor mentioned,你可以使用Task
,但是你會失去BackgroundWorker
的便利,它有其熟悉的面向事件的接口,進度報告等等。
從您的描述看來,這些步驟似乎是相關的並且是連續的,所以我將它作爲單個BGW執行,其中DoWork
執行兩個步驟,在解析步驟和寫入數據庫步驟之間調用ReportProgress
。
然後,您可以處理在UI線程上運行的ProgressChanged
事件,以在分析步驟完成後執行任何邏輯,從而知道工作人員已在寫入數據庫。
ReportProgress
接受一個整數來標識後臺任務和可選自定義對象的完成百分比。因此,在您的ProgressChanged
處理程序中,您需要具有解釋此進度信息的邏輯。在這種情況下,作爲一項兩步工作,您可以致電ReportProgress(50)
。
ReportProgress不僅接受整數。接受對象的重載有助於提供豐富的反饋。 – 2012-01-02 17:27:06
你說得對,我查了MSDN,完全錯過了過載。答案已更新。 – 2012-01-02 17:51:39
開始另一個BGW沒有意義。在第一步完成後,只需要第一個執行step2代碼即可。你甚至可以直接調用它的DoWork()方法。 – 2012-01-02 16:41:36