BackgroundWorker
和Thread
有什么区别?我在我的应用程序中使用了一个与数据库进行定期通信的消息系统。在这种情况下,我应该使用哪个: BackgroundWorker
还是Thread
?
BackgroundWorker
和Thread
有什么区别?我在我的应用程序中使用了一个与数据库进行定期通信的消息系统。在这种情况下,我应该使用哪个: BackgroundWorker
还是Thread
?
BackgroundWorker
类虽然没有从 Thread
类继承,但它可以比自己创建和调用线程更轻松地管理线程所做的工作。
它引发三个关键事件:
DoWork
- 在线程启动时引发。ProgressChanged
- 引发以向主 UI 线程报告进度。RunWorkerCompleted
- 在线程完成后引发。使用这些事件,您可以在调用 RunWorkerAsync()
启动线程后监视线程正在执行的工作。
BackgroundWorker已经实现了报告进度、完成和取消的功能,因此您不需要自己实现它。
使用Thread可以更好地控制异步进程的执行(例如线程优先级或选择前台/后台线程类型)。
顺便说一句,有时您不需要进度报告和其他BackgroundWorker功能 - 因此Thread / ThreadPool将是很好的替代方案。
BackgroundWorker
使用线程池中的线程,而使用 Thread 则可以创建自己的线程。此外,在事件报告方面也提供了一些便利,以便向调用线程报告事件。
我认为有一个很大的区别,那就是当你想在被BackgroundWorker调用的方法中使用任何UI组件时,它根本不起作用。我的意思是BackgroundWorker实际上是一个后台进程,你将无法使用界面操作。例如,如果你在方法中创建一个新的标签,该方法将由BackgroundWorker调用,你肯定会遇到错误。