我發現我很享受通過BackgroundWorkers異步運行代碼的簡單性。我通過例子或反覆試驗來了解自己的用途,陷阱,安全線程等,而不是理論,也許是我的致命弱點。如何創建一個後臺工作者池?
我已經完成了我的研究,但有一件事我沒有找到太多的話題,我如何有效地創建和使用一個BackgroundWorkers池?或者什麼是更好的選擇,就像使用BW一樣簡單?
我會說明我遇到的問題: 我有一個任務X,Y和Z,每一個都是密集的,因此它將掛起UI線程。我決定BW是答案,即使這個代碼只執行一次。我學會了如何使用它們,以及一些安全的線程實踐,並繼續前進。很快我的代碼看起來像:BW1,BW2,BW3等等。
然後我開始更加熟悉它們,並真正將代碼放入可用於硬件監視或其他無限循環/總是運行項目的BW中。我仍遇到BW5,BW6 ....問題。
我發現創造性的方式來通過在調用RunWorkerAsynchronous()之前設置一個全局字符串變量來獲得多用途BackgroundWorkers,然後我可以在BackgroundWorker內部嵌套If/Elses或開關以執行所需的代碼關閉了我設置字符串變量的內容。但是,我覺得我只是在自我學習的極限內跳舞。
因此,誰能指導我通過創建線程/ BW中的池的概念,並根據需要在我的程序中使用它們,回收線程,而不是明確地建立每一個,然後有幾十backgroundworkers的特定密集的目的去玩弄?
注:我不是一個很好的程序員,所以我正在尋找簡單的功能示例或解釋。任何和所有的幫助,但熱切歡迎!
你看過Tasks(TPL)和/或正規的ThreadPool嗎? IIRC,如果需要用於更新WPF或Winforms UI的同步上下文,backgroundworker會很好,但它不完全靈活。 – x0n 2014-10-16 15:46:38
你檢查了[ThreadPool Class](http://msdn.microsoft.com/en-us/library/System.Threading.ThreadPool(v = vs.110).aspx?cs-save-lang = 1&cs-lang = csharp#code-snippet-1) – bansi 2014-10-16 15:46:58
這是.NET 2.0還是更高? – 2014-10-16 15:48:03