2010-03-10 95 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. 每个流程结束可以使用另一个委托,因此做一些其他操作。

希望它有帮助!