异步回调AsyncCallback 与 后台处理BackgroundWorker 区别

.Net技术 码拜 7年前 (2015-03-17) 448次浏览 0个评论
 

目前用UDP 协议控制LED 显示屏 书上介绍了 异步回调 机制,个人理解就是非UI 主线程的 耗时的工作另外开辟一条线程处理它,完了后结束了通知UI,保持界面流畅或者说主线程不至于假死。
突然想到以前用 后台 线程 BackgroundWorker  也是为了用户体验不让UI 长时间等待而设计的。我想请教大鸟们,这两个对象是否有区别,如果有区别 各自都是用在什么场合下的?我记得以前winform开发中没有见到过 BackgroundWorker 类,是不是wpf里才出现的后台线程的概念呢?

异步回调AsyncCallback 与 后台处理BackgroundWorker 区别
18分
简单谈谈我的个人看法
1、BackgroundWorker使用的时候,需要添加组件;异步回调不需要
2、BackgroundWorker提供可视化界面(比如进度条);异步回调没有
3、两者都是在非UI线程执行,不会使得操作界面无响应、卡死等现象
3、非人机交互的场景,比如Socket服务端,没必要使用BackgroundWorker
异步回调AsyncCallback 与 后台处理BackgroundWorker 区别
12分
 BackgroundWorker 组件在 .net 2.0 就有,而 WPF 是 .net3.0才出现的。异步回掉方式从1.0就有。
而Control.Invoke/BeginInvoke 在 1.0 中也有。只不过,大概是在2.0或者3.0的时代,由于普通用户对多线程冲突问题太难以编写框架来处理,才发现可以简单地通过限制线程中的代码访问.net的控件(检查是不是从创建控件的线程执行的访问代码)来规范它。于是加强了 Invoke/BeginInvoke 委托功能(使得其可以自动切换线程),从而你的(委托注册的)代码可以通过调用它来达到切换代码执行线程的作用。
编同一种程序有许多种方式,且都是.net框架现成的、经过千锤百炼的,而不需要找第三方来路不明的类库。这是.net的特点。
异步回调AsyncCallback 与 后台处理BackgroundWorker 区别
10分
BackgroundWorker 是 2.0 特意增加的一个组件,可以用于“所见即所得”的设计中,可以用鼠标拖到设计窗口上,并且在属性窗口给属性和事件进行设定。它给你提供几个代码扩展功能点,省得你再去开发模式进行复用。
这和UI控件的思路基本类似。只不过组件比控件“轻量”,没有那么多功能。
异步回调AsyncCallback 与 后台处理BackgroundWorker 区别
非常感谢两位回答我的问题,backgroundwork 不需要用委托刷新控件,异步回调貌似稍微麻烦点。
异步回调AsyncCallback 与 后台处理BackgroundWorker 区别
引用 2 楼 lovelj2012 的回复:

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

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


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明异步回调AsyncCallback 与 后台处理BackgroundWorker 区别
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!