界面-工作者线程结构之:异步委托调用
2012-02-12 09:41
239 查看
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版) 》
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版) 》
相关文章推荐
- (二)线程--通过委托异步调用方法
- 谈.Net委托与线程——创建无阻塞的异步调用
- (二)线程--通过委托异步调用方法
- (二)线程--通过委托异步调用方法
- 谈.Net委托与线程——创建无阻塞的异步调用
- 异步委托跨线程访问控件解决界面卡死
- 界面-工作者线程结构之:使用System.ComponentModel.BackgroundWorker类
- 谈.Net委托与线程——创建无阻塞的异步调用
- 线程、委托的异步调用
- 【转】谈.Net委托与线程——创建无阻塞的异步调用
- 界面-工作者线程结构之:使用System.Threading
- C#构建多线程应用程序(1) —— 使用委托来自动创建次线程以实现异步方法的调用
- c#使用委托实现异步调用
- [原创]异步调用,多线程,委托
- 异步调用与线程(总结篇)
- C#委托的异步调用[转]
- 关于异步委托调用
- Orchard 源码探索(Application_Start)之异步委托调用
- C# 委托事件的异步调用
- Windows 线程漫谈——界面线程和工作者线程