简单谈谈我的个人看法
1、BackgroundWorker使用的时候,需要添加组件;异步回调不需要
2、BackgroundWorker提供可视化界面(比如进度条);异步回调没有
3、两者都是在非UI线程执行,不会使得操作界面无响应、卡死等现象
3、非人机交互的场景,比如Socket服务端,没必要使用BackgroundWorker

解决方案 »

  1.   

     BackgroundWorker 组件在 .net 2.0 就有,而 WPF 是 .net3.0才出现的。异步回掉方式从1.0就有。而Control.Invoke/BeginInvoke 在 1.0 中也有。只不过,大概是在2.0或者3.0的时代,由于普通用户对多线程冲突问题太难以编写框架来处理,才发现可以简单地通过限制线程中的代码访问.net的控件(检查是不是从创建控件的线程执行的访问代码)来规范它。于是加强了 Invoke/BeginInvoke 委托功能(使得其可以自动切换线程),从而你的(委托注册的)代码可以通过调用它来达到切换代码执行线程的作用。编同一种程序有许多种方式,且都是.net框架现成的、经过千锤百炼的,而不需要找第三方来路不明的类库。这是.net的特点。
      

  2.   

    BackgroundWorker 是 2.0 特意增加的一个组件,可以用于“所见即所得”的设计中,可以用鼠标拖到设计窗口上,并且在属性窗口给属性和事件进行设定。它给你提供几个代码扩展功能点,省得你再去开发模式进行复用。这和UI控件的思路基本类似。只不过组件比控件“轻量”,没有那么多功能。
      

  3.   

    非常感谢两位回答我的问题,backgroundwork 不需要用委托刷新控件,异步回调貌似稍微麻烦点。
      

  4.   

    internal BackgroundWorker BackgroundWorkerObject; 我也没有添加组件,就直接新建个后台对象 而已。