你想完成什麼依賴。你試圖促成什麼樣的溝通?
如果我猜測,您真正想要的只是在您的應用程序中報告[或顯示]您的工作人員結果。如果是這種情況,那麼你有一個視圖模型一個典型的WPF應用程序,說
public class AwesomeViewModel : INotifyPropertyChanged
{
// if small fixed number, otherwise, you could use
// an ObservableCollection<T>
public string WorkerResultA { ... }
public string WorkerResultB { ... }
public string WorkerResultC { ... }
}
這是數據綁定到您的WPF控件。您可以簡單地將視圖模型的引用傳遞給每個工作線程,並且他們更新該類,而不需要在Gui線程上阻塞\等待。以這種方式,每個工人在完成時報告其結果,而不需要其他人的干預。這是最佳的。
當然,如果你繼續這樣做,you run into another completely different issue。哪個fyi可以通過Dispatcher解析。 One possible solution here。
至於BackgroundWorker
與明確Thread
控制,這取決於你。兩者都有優點,但請記住,您已經編寫了功能性代碼。那並且在我個人看來,BackgroundWorker
不是特別有用。
如果你真的絕對正必須實現更復雜的同步模式,那麼我強烈建議你刷上ManualResetEvent其表弟AutoResetEvent,Semaphore,關鍵字lock和一般並行編程。對不起,沒有快捷方式:)
希望這會有所幫助!