后台工作进程或线程?

时间:2009-08-27 19:27:49

标签: winforms multithreading

我有一个Winform应用程序,它在gridview中列出了一批发票。用户选择批次并单击“生成发票”按钮。这个过程大约需要4-5分钟。在运行时,我将有一个选取框进度条,并希望禁用所有按钮。

我应该使用BackgroundWorker Process还是创建新线程来运行此任务?

5 个答案:

答案 0 :(得分:5)

这是BackgroundWorker的确切任务类型。您应该将其推送到后台工作程序,并允许它运行。这提供了一种更新进度条等的简单方法。

没有理由为此创建自己的主题。通过BackgroundWorker的ThreadPool可以很好地工作。

答案 1 :(得分:3)

后台工作进程具有有限数量的线程(20或25,无法准确记住),并且使用其中一个将使该线程停止运行4-5分钟。一般来说,建议不要将后台工作进程用于长时间运行的任务,但如果你一次只运行一个线程,这不是一个真正的问题。

在一个理想的世界里,我可能会创建自己的主题,但这需要付出努力和理解。

答案 2 :(得分:1)

一个单独的过程当然会更安全:如果它有任何问题(崩溃,无限循环,泄漏或其他) - 这些问题不会影响父进程。

答案 3 :(得分:1)

后台工作人员更容易,并且完全根据您的案例(check the first few lines of msdn)进行设计。

所以我会遵循KISS原则:)

事实上,后台工作者甚至比普通线程更快! 因为它由一个线程池支持,所以它避免了昂贵的线程重新创建。

关于Jaimal Chohan提到的限制:因为后台工作者由线程池支持,所以它具有25个并行任务的限制,但对于任何gui应用程序来说应该足够了。 (如果你以某种方式超过了数字,进一步的任务将只是等待其他人完成)

答案 4 :(得分:-1)

如果工作人员有内存泄漏,肯定是后台进程。