代表与BackgroundWorker的差异?

Raj*_*r G 0 c# delegates backgroundworker

任何人都可以解释委托和BackgroundWorker之间的区别吗?在哪种情况下,Backgroundworker比Delegate更有效?因为我们有异步委托,所以需要使用BackGroungWorker.

Ode*_*ded 9

BackgroundWorker:

BackgroundWorker类允许您在单独的专用线程上运行操作.

Delegate:

委托是定义方法签名的类型....委托用于将方法作为参数传递给其他方法.


使用哪一个与效率无关的问题.

BackgroundWorker是一个简化了线程处理的包装器,您也可以使用异步委托,但正确管理它们要困难得多.或者,从MSDN:

当您需要响应式UI并且遇到与此类操作相关的长时间延迟时,BackgroundWorker类提供了一种方便的解决方案.


Ste*_*ary 5

在我的博客上BackgroundWorker,异步委托和其他方法进行了简要比较(从做后台操作的角度来看)。

BackgroundWorker 具有以下优点:

  • 进度报告很容易。任何BackgroundWorkerWorkerSupportsProgress属性为true可能会报告进展情况。该DoWork委托可以调用ReportProgress,这将导致ProgressChanged事件火灾。
  • 有一个内置的合作取消系统。取消线程首先调用BackgroundWorker.CancelAsync. 这会导致该BackgroundWorker.CancellationPending属性变为真。该DoWork代表应是财产(检查它定期),并设置监控DoWorkEventArgs.Cancel,如果操作被取消,以真实的回报。该RunWorkerCompleted委托检测通过检查已取消的结果RunWorkerCompletedEventArgs.Cancelled
  • 对于完成指示和进度报告,同步是自动的。在ProgressChangedRunWorkerCompleted事件同步到SynchronizationContext是很到位的时候RunWorkerAsync被调用。

异步委托具有以下优势:

  • 返回值很简单;它刚刚返回。

总之,我建议使用Task<TResult>而不是使用BackgroundWorker异步委托或异步委托。