2010-02-12 39 views
2

我必須在Windows NT服務(使用.Net2.0/C#)中並行執行3個異步操作。爲此我使用Backgroundworker組件。BackgroundWorker Thread - C#

  1. 這是一個很好的選擇/方法嗎?
  2. 對於連續操作,我在RunWorkerCompleted事件中再次調用RunWorkerAsync()。

請給我建議。

回答

1

通常BackgroundWorker用於長時間操作。如果你只需要並行執行3個任務,你可以使用簡單的線程。

+0

所有這3個操作都是長時間操作。涉及很多處理。其中之一是將大型MB文件複製到文件夾位置。所以,我仍然應該採取正常的線程。我不是很清楚和自信。 – DotNetGuy 2010-02-12 17:03:56

+0

如果您不需要關於更改進度和任務完成的警報 - 則可以使用線程,否則使用後臺工作程序。 – sashaeve 2010-02-12 17:33:11

1

通常情況下,當您需要RunWorkerCompleted在GUI中執行更新時,會使用BackgroundWorker。至少這是我一直在使用它的方式。這聽起來像你想要不斷運行,所以爲什麼不使用普通的工作線程?

我看到的最大問題是BackgroundWorker使用.NET線程池,所以如果您真的希望它持續運行,那麼您只保證使用其中一個線程池線程,其中有一個線程池線程數量可用。

+0

使用線程池線程是錯誤的嗎? – DotNetGuy 2010-02-12 17:02:24

+0

我認爲這取決於。我現在一直都在使用它們,甚至沒有使用普通的線程。但是你需要知道線程池線程的限制。 BackgroundWorker,Windows Workflow和我認爲就委託使用BeginInvoke使用線程池。我敢打賭,在複雜的應用程序中運行起來非常容易。 – Dave 2010-02-12 20:32:44

+0

酷!在未來,如果我需要更新某種UI來描述這3個操作的進度,那麼BckgrndWrkr會派上用場。 而且,您是否預見到在RunWorkerCompleted事件中再次調用RunWorkerAsync()時會遇到任何問題? – DotNetGuy 2010-02-13 10:32:41

0

我不會爲你在這裏描述的工作使用backgroundworkers。

後臺工作人員的目的是用於一些「長期」運行操作,同時保持響應式用戶界面。使用服務打破了UI模式。

對於服務我會使用一個計時器和三個線程。

讓計時器檢查三個線程的存在並重新啓動它們或在需要時報告錯誤。這三個線程可以在while循環中完成他們自己的工作(不要忘記在那裏添加一個睡眠(0))