我有一个有很多长方法的表单。我的追求是:最佳做法是什么?使用匿名方法,只有一个背景工作者或为每个长方法创建一个BackgroundWorker实例。使用backgroundworker的多种长时间方法的最佳实践
请帮忙。谢谢。
我有一个有很多长方法的表单。我的追求是:最佳做法是什么?使用匿名方法,只有一个背景工作者或为每个长方法创建一个BackgroundWorker实例。使用backgroundworker的多种长时间方法的最佳实践
请帮忙。谢谢。
我会personnaly为每个任务使用一个BackgroundWorker实例。但是,请记住,您可能会在多个不同的线程实例中多次调用相同的委托方法。
通过为每个长方法任务使用一个BackgroundWorker,您将对您的方法拥有充分的控制权。此外,就我的理解而言,一旦BackgroundWorker的实例执行任务,它就忙于此后台任务,因此无法为其他人使用。虽然我可能会误解,但无论如何,我的方式是这么做的,因为您的DoWork()事件处理程序只能执行要求为此BackgroundWorker执行的操作。所以,我似乎不可能为BackgroundWorker的一个实例执行完全不同的任务。
这有帮助吗?
是的,这个帮助。我的长方法没有连续运行。我会用你的建议。对不起英语不好...... – wallybh 2010-03-10 18:52:56
不要打扰,我是法语国家! = P Hehehe ... – 2010-03-10 19:03:45
如果你将你长时间运行的方法拆分成多个小块,并将小块分解为其他多个BackgroundWorkers,这可能会有所帮助。这一切都取决于这些方法是否可以咀嚼成更小的代码片段,如果你明白我的意思。 – 2010-03-10 19:06:59
总结:
优点于一身的BackgroundWorker:
您控制执行所述多个方法的顺序。然而,这也是一个缺点,因为如果你使用多个BackgroundWorkers,你可以“假设”它们并行执行,而不必担心顺序;
线程创建和处理的开销较小(如果可能的话,每次都使用相同的实例,但这并不总是可能的,具体取决于启动进程的情况,如果要同时完成则不可能)。
如果您想要在线程之间进行通信,您可以累积批量通信并更有效地执行此操作。而且,如果所有方法都在同一个线程中运行,它可以为您节省一些通信。
优点在多个BackgroundWorkers:
上述并行;
每个流程结束可以使用另一个委托,因此做一些其他操作。
希望它有帮助!
只要在代码行或长期运行? – 2010-03-10 18:39:07
只要长时间运行。 – wallybh 2010-03-10 18:49:49