2011-10-05 83 views
0

我想同時執行多個任務(遠程共享上的磁盤IO)。我不想阻止用戶界面。我想我需要創建一個自定義的類,它的下面...什麼是創建多個後臺工作線程的最佳方式?

  • 接受和隊列的請求(使用堆棧)
  • 檢查線程池,如果一個線程是可用的請求啓動它信息
  • 由於每個線程完成檢查堆棧待處理的請求...

有沒有更好的方式來做到這一點?

有沒有可用的類?

我應該使用BackgroundWorker類還是別的什麼東西?

我必須在自定義類中實現BackgroundWorker類,以便可以創建多個線程嗎?

我想創建多達8個線程來刪除文件和文件夾。我需要查詢堆棧上的項目數量以更新UI。

我目前有代碼與單個BackgroundWorker線程一起刪除文件和文件夾(這使UI不鎖定,但它需要很長時間,我傾向於同時運行幾個實用程序)。

感謝, 李

+0

我知道它的標籤,但做了['ThreadPool'](http://msdn.microsoft.com/en-us/library/3dasc8as%28v= vs.80%29.aspx)滿足您的需求? –

回答

1

如果您使用.NET 4,然後將任務並行庫看起來正是你需要的。有關MSDN的信息,請訪問:http://msdn.microsoft.com/en-us/library/dd460717.aspx

具體地,在http://msdn.microsoft.com/en-us/library/dd537608.aspx的例子建議用

Parallel.ForEach(sourceCollection, item => Process(item)); 

替換

foreach (var item in sourceCollection) 
{ 
    Process(item); 
} 

只要警惕在代碼死鎖;特別是廣泛測試,因爲在Windows網絡協議棧的深處有時會出現奇怪的事情。

0

您可以使用一個BackgroundWorker池,但注意它是專爲在簡單的多線程場景中使用而設計的。 我會推薦使用TPL或者Threadpool來解決你的問題,但是如果你的代碼已經和一個BackgroundWorker一起工作,你將會更快,重寫它而不是使用TPL。

也許這次討論將幫助你的決定:BackgroundWorker vs. BackgroundThread

相關問題