.net BackgroundWorker和Thread之间的区别?

.net BackgroundWorker和Thread之间的区别?,.net,multithreading,.net,Multithreading,BackgroundWorker和Thread之间有什么区别?在我的应用程序中,我使用一个定期与数据库通信的消息传递系统。我想在这里使用哪一个:BackgroundWorker或Thread?BackgroundWorker已经实现了报告进度、完成和取消的功能-因此您不需要自己实现它。 线程的使用使您能够更好地控制异步进程的执行(例如线程优先级或选择前/后台线程类型) 顺便说一句,有时候你不需要进度报告和其他后台工作人员的东西,所以线程/线程池将是一个不错的选择 BackgroundWorker

BackgroundWorker
Thread
之间有什么区别?在我的应用程序中,我使用一个定期与数据库通信的消息传递系统。我想在这里使用哪一个:
BackgroundWorker
Thread

BackgroundWorker已经实现了报告进度、完成和取消的功能-因此您不需要自己实现它。 线程的使用使您能够更好地控制异步进程的执行(例如线程优先级或选择前/后台线程类型)


顺便说一句,有时候你不需要进度报告和其他后台工作人员的东西,所以线程/线程池将是一个不错的选择

BackgroundWorker使用
线程池中的线程,线程由您创建自己的线程。此外,在向调用线程报告事件方面还有一些便利。

BackgroundWorker是一种线程实现,允许您指定要执行的方法


它为您提供了一个通信API,允许您停止工作、跟踪进度并异步获得通知

使用BackgroundWorker-它无论如何都封装了线程,而且使用起来更简单。它的一个优点是,它的api允许更简单的基于事件的模型报告进度,而且,这些事件调用可以正确路由到UI线程(这样您就不必使用Invoke方法封送调用).

在WinForms中,A是一个随时可用的类,允许您在后台线程上执行任务,从而避免冻结UI,此外,还允许您在主线程上轻松封送成功回调的执行,这使您可以使用结果更新用户界面。它还提供了跟踪进度和取消任务的可能性。它使用线程池中的线程

另一方面,a是一个类,它允许您在新服务器上简单地执行某些任务。它是一个更为基本的概念。

虽然它不是从
线程类派生出来的,但与您自己创建和调用线程相比,它使您能够更轻松地管理线程所做的工作

它提出了三个关键事件:

  • DoWork
    -线程启动时引发
  • ProgressChanged
    -引发以向主UI线程报告进度
  • RunWorkerCompleted
    -在线程完成时引发

有了这些,您可以在调用
RunWorkerAsync()
启动线程后监视线程正在做的工作。

我认为有一个很大的区别,即当您想在BackgroundWorker调用的方法中使用任何UI组件时,它根本不起作用。我的意思是BackgroundWorker实际上是一个后台进程,您将无法使用接口操作。例如,如果您在BackgroundWorker将要调用的方法中创建一个新标签,您肯定会发现一个错误。

BackgroundWorker封装了一个线程?你在说什么?有一个封装的委托,它是异步调用的。@lazyberezosky-你说得对。我用错了词。我将更新答案。“BackgroundWorker是WinForms中一个随时可用的类”。不仅仅是WinForm、WPF和Console。