C#.NET使用Task,await,async,异步执行控件耗费时间事件(event),不阻塞UI线程和不跨线程执行UI更新,以及任何方法相比较

采纳Task,await,async,异步执行事件(event),不阻塞UI线程和不跨线程执行UI更新

  使用Task,await,async 的异步形式 去执行事件(event)
化解不阻塞UI线程和不夸跨线程执行UI更新报错的超级实践,附加两种此外方法比较

由于是Winform代码和其他原因,本小说只做代码截图演示,不做界面UI展示,当然全数代码都会在截图呈现。

 

1:封装异步按钮(为了相比较放了一个按钮)和进程条的控件,包蕴基本文件演示截图

1.1 演示工程截图图片 1 1.2按钮和进度条控件演示 图片 2

 

2:定义异步委托和事件和三种演示封装

2.1
定义相关事件图片 3
浅析:最前头的是数见不鲜的风云定义,前面2行是异步定义。

 

2.2 按钮名称[Task]进行平日异步Task

图片 4

解析调用进程:当用户点击按钮时会加载全部用户注册的风浪进展二十八线程分发,单独每多少个委托开始展览实施,最终单独行使线程实行等待,那样不阻塞UI线程。

而是用户注册的风浪措施若是有更新UI会报错,需求格外的Invoke进行处理。

 

 

2.3 按钮名称[BeginInvoke]履行日常异步

图片 5

浅析调用进度:这些调用进度和Task一样,但是简单,这几个也足以写成多事件注册,多多精晓异步编制程序模型的裨益(原理:异步执行,内部等待信号公告终止)。

 

 

2.4 (推荐)按钮名称[Task await]履行方便的异步耗费时间操作和省略的UI

图片 6

浅析调用进度:推荐的章程附加调用流程图片 7

 这几个全是可取啊:代码精简,异步执行办法能够像一只的法子来调用,用户注册的轩然大波措施能够轻易更新UI,无需invoke,稍微改造一下就能多事件注册。

 

3:别的用户调用封装好的异步按钮执行耗费时间操作

 图片 8

 

总结

 

咱们有时间的可以团结依据截图去敲打代码试试,总括如下:

1.按钮名称[Task] 
 : 
可以兑现多少个事件注册,然则代码相比多,急需额外的线程等待来甘休进程条,而且用户注册的事件的方式更新UI时会报错,提示跨线程操作UI,供给invoke方法调用到UI线程执行。

2.按钮名称[BeginInvoke] : 
简单方便的异步编制程序模型,不供给卓绝的线程伺机截至来停止进程条,缺点和按钮名称[Task]同样,用户注册的风云的办法更新UI时会报错,提示跨线程操作UI,须求invoke方法调用到UI线程执行.

3.按钮名称[Task await] :
稍微有一小点绕,不过不难呀,不须求额外的线程等待UI更新进程条,像一道方法放在await前边即可,而且用户注册的风云措施
更新UI时不供给invoke方法回到UI线程执行。

 

相关文章