我有一个有很多长方法的表单。我的任务是:最佳做法是什么?使用匿名方法和只有一个backgroundworker或为每个long方法创建BackgroundWorker实例。
请帮忙。感谢。
答案 0 :(得分:2)
我个人会为每个任务使用一个BackgroundWorker实例。但是,请记住,您可以在多个不同的线程实例中多次调用相同的委托方法。
通过每个长方法任务一个BackgroundWorker,您可以充分控制您的方法。此外,据我所知,一旦BackgroundWorker的一个实例执行任务,它就会忙于这个后台任务,因此无法让其他任务完成。我可能也错了,但无论如何我都会这么做,因为你的DoWork()事件处理程序只能执行它对此BackgroundWorker要求的操作。所以,我似乎不可能只为一个BackgroundWorker实例执行完全不同的任务。
这有帮助吗?
答案 1 :(得分:2)
总结:
在一个BackgroundWorker中的优势:
您可以控制多个方法的执行顺序。然而,这也是一个缺点,因为如果您使用多个BackgroundWorkers,您“假设”它们并行执行而不必担心订单;
创建和处理线程的开销较少(如果可能,每次都使用相同的实例,但这并不总是可行的,具体取决于启动过程的内容。如果您希望它同时完成,则不可能;)< / p>
如果要在线程之间进行通信,可以累积批量通信并更有效地进行。此外,如果所有方法都在同一个线程中运行,它可以为您节省一些通信。
多个BackgroundWorkers的优势:
上述并行性;
每个进程结束都可以使用另一个委托,因此可以执行其他操作。
希望它有所帮助!