博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
界面-工作者线程结构之:异步委托调用
阅读量:6305 次
发布时间:2019-06-22

本文共 998 字,大约阅读时间需要 3 分钟。

1.流程:

  1.1 定义一个委托,形如:public delegate object WorkThread(object controlsAndParameters);由于object可以容纳任何.Net类型,当然可以传入一个object数组,这样就可以传入任意多的主线程控件对象和工作者线程需要的参数对象,同时返回值也是object,故主次线程的对象可以实现某种意义上的共享
  1.2 实现工作者线程承载的函数,如:object DoSomething(object controlsAndParameters);形式与1.1中的委托一致。在此函数中可以动态控制传入的控件对象,表明此线程的执行状态。
  1.3 主线程中声明委托实例,WorkThread wh = new WorkThread(DoSomething);
  1.4 异步调用,开启工作者线程,IAsyncResult iar = wh.BeginInvoke(controlsAndParameters,new AsyncCallback(DoComplete),controls);
  1.5 实现异步调用结束函数:void DoComplete(IAsyncResult);将1.4中的放回值iar传入,而iar实际上是System.Runtime.Remoting.Messaaging空间中AsyncResult类的实例,AsyncResult类有两个重要的属性:(1)AsyncDelegate:指向原始委托的引用,即wh;(2)AsyncState:指向BeginInvoke中的最后一个传入参数,即controls;由(1)得到原始委托,并调用EndInvoke()得到DoSomething的返回值,由(2)可在异步调用结束时对界面 进行适当的控制。

2.缺点:

  2.1 由于DoSomething()和DoComplete()都是在工作者线程中执行,所以按上述形式,最终工作者线程的执行结果是在工作者自己处理的,如果主线程要得到执行结果,就必须自己轮询判断工作者线程是否执行结束,非常不方便。

  

参考:《C#与.NET 4高级程序设计 (第5版) 》

转载于:https://www.cnblogs.com/lihaoran/archive/2012/02/12/2347715.html

你可能感兴趣的文章
DHCP
查看>>
oracle数据泵导入分区表统计信息报错(四)
查看>>
spring技术内幕读书笔记之IoC容器的学习
查看>>
细说多线程(五) —— CLR线程池的I/O线程
查看>>
JavaScript instanceof和typeof的区别
查看>>
Hadoop文件系统详解-----(一)
查看>>
《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(8)--- 主动器...
查看>>
状态码
查看>>
我的友情链接
查看>>
用sqlplus远程连接oracle命令
查看>>
多年一直想完善的自由行政审批流程组件【2002年PHP,2008年.NET,2010年完善数据设计、代码实现】...
查看>>
自动生成四则运算题目
查看>>
【翻译】使用新的Sencha Cmd 4命令app watch
查看>>
【前台】【单页跳转】整个项目实现单页面跳转,抛弃iframe
查看>>
因为你是前端程序员!
查看>>
数据库设计中的14个技巧
查看>>
Android学习系列(5)--App布局初探之简单模型
查看>>
git回退到某个历史版本
查看>>
ecshop
查看>>
HTML5基础(二)
查看>>