2012-07-11 57 views
0

我需要並行運行四個功能,同時保持UI響應和報告進度,是後臺工作者的最佳方式嗎?我怎樣才能在winform中做到這一點?Winform可以使用backgroundworker並行運行功能嗎?

+0

有大量的信息,這一切都在WWW。我會建議一個更完整的搜索之前,在這裏問這樣的問題... – MoonKnight 2012-07-11 09:08:16

+0

我沒有找到任何例子,其中parallel.invoke用於後臺工作。我猜你不能在後臺工作人員中完成多項任務嗎?......有理由問我是否在正確的軌道上。我嘗試了通過在clickbutton事件後面啓動線程,任務和parallel.invoke來運行四個函數,但都沒有工作,因爲我試圖實現parllel exectuion,但我正在按順序執行。我想知道如果我開始後臺線程/任務/ parallel.invoke做錯了什麼。只要我不更新屏幕上的任何東西,這應該工作。 – user1514077 2012-07-11 12:21:47

回答

1

爲此,您可以使用BackgroundWorker,但我會建議Task Parallel Library。你想要的東西,你可以使用類似下面的

TaskCreationOptions atp = TaskCreationOptions.AttachedToParent; 
Task.Factory.StartNew(() => 
{ 
    Task.Factory.StartNew(() => { SomeMethod() }, atp); 
    Task.Factory.StartNew(() => { SomeOtherMethod() }, atp); 
}).ContinueWith(cont => { Console.WriteLine("Finished!") }); 

這是使用的子任務,在這裏我有兩個,你會使用4。有一些限制需要注意,因爲TPL使用線程池,它限制了真正的併發操作的數量。請檢查該https://stackoverflow.com/a/11229896/626442和第三方物流企業和通用線程的詳細信息請參見

J. Albahari's Threading in C#

和(第三方物流專)

This great tutorial

1

是,使用任務並行庫。你可以並行運行的任務,如

Parallel.Invoke(() => DoSomeWork(),() => DoSomeOtherWork()); 

而且它爲您提供了比後臺工作更多的選擇

更多參考:TPL