目前用UDP 协议控制LED 显示屏 书上介绍了 异步回调 机制,个人理解就是非UI 主线程的 耗时的工作另外开辟一条线程处理它,完了后结束了通知UI,保持界面流畅或者说主线程不至于假死。 |
|
![]() 18分 |
简单谈谈我的个人看法
1、BackgroundWorker使用的时候,需要添加组件;异步回调不需要 2、BackgroundWorker提供可视化界面(比如进度条);异步回调没有 3、两者都是在非UI线程执行,不会使得操作界面无响应、卡死等现象 3、非人机交互的场景,比如Socket服务端,没必要使用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的特点。 |
![]() 10分 |
BackgroundWorker 是 2.0 特意增加的一个组件,可以用于“所见即所得”的设计中,可以用鼠标拖到设计窗口上,并且在属性窗口给属性和事件进行设定。它给你提供几个代码扩展功能点,省得你再去开发模式进行复用。
这和UI控件的思路基本类似。只不过组件比控件“轻量”,没有那么多功能。 |
![]() |
非常感谢两位回答我的问题,backgroundwork 不需要用委托刷新控件,异步回调貌似稍微麻烦点。
|
![]() |
internal BackgroundWorker BackgroundWorkerObject; 我也没有添加组件,就直接新建个后台对象 而已。 |