2010-03-10 33 views
7

我有一個有很多長方法的表單。我的追求是:最佳做法是什麼?使用匿名方法,只有一個背景工作者或爲每個長方法創建一個BackgroundWorker實例。使用backgroundworker的多種長時間方法的最佳實踐

請幫忙。謝謝。

+0

只要在代碼行或長期運行? – 2010-03-10 18:39:07

+0

只要長時間運行。 – wallybh 2010-03-10 18:49:49

回答

2

我會personnaly爲每個任務使用一個BackgroundWorker實例。但是,請記住,您可能會在多個不同的線程實例中多次調用相同的委託方法。

通過爲每個長方法任務使用一個BackgroundWorker,您將對您的方法擁有充分的控制權。此外,就我的理解而言,一旦BackgroundWorker的實例執行任務,它就忙於此後臺任務,因此無法爲其他人使用。雖然我可能會誤解,但無論如何,我的方式是這麼做的,因爲您的DoWork()事件處理程序只能執行要求爲此BackgroundWorker執行的操作。所以,我似乎不可能爲BackgroundWorker的一個實例執行完全不同的任務。

這有幫助嗎?

+0

是的,這個幫助。我的長方法沒有連續運行。我會用你的建議。對不起英語不好...... – wallybh 2010-03-10 18:52:56

+1

不要打擾,我是法語國家! = P Hehehe ... – 2010-03-10 19:03:45

+1

如果你將你長時間運行的方法拆分成多個小塊,並將小塊分解爲其他多個BackgroundWorkers,這可能會有所幫助。這一切都取決於這些方法是否可以咀嚼成更小的代碼片段,如果你明白我的意思。 – 2010-03-10 19:06:59

2

總結:

優點於一身的BackgroundWorker:

  1. 您控制執行所述多個方法的順序。然而,這也是一個缺點,因爲如果你使用多個BackgroundWorkers,你可以「假設」它們並行執行,而不必擔心順序;

  2. 線程創建和處理的開銷較小(如果可能的話,每次都使用相同的實例,但這並不總是可能的,具體取決於啓動進程的情況,如果要同時完成則不可能)。

  3. 如果您想要在線程之間進行通信,您可以累積批量通信並更有效地執行此操作。而且,如果所有方法都在同一個線程中運行,它可以爲您節省一些通信。

優點在多個BackgroundWorkers:

  1. 上述並行;

  2. 每個流程結束可以使用另一個委託,因此做一些其他操作。

希望它有幫助!