我有一个Winform应用程序,它在gridview中列出了一批发票。用户选择批次并单击“生成发票”按钮。这个过程大约需要4-5分钟。在运行时,我将有一个选取框进度条,并希望禁用所有按钮。
我应该使用BackgroundWorker Process还是创建新线程来运行此任务?
答案 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)
如果工作人员有内存泄漏,肯定是后台进程。