.NET中实现异步操作的三种方式:

异步委托、用BackgroundWorker组件、显式使用System.Threading.Thread

上述三种技术中核心都是使用线程,各有其适合的使用场所,其中前两种较为方便,适合完成单任务的异步操作,但第三种扩展性、灵活性最高,下面会各个介绍。

总结.NET中异步通讯[读win control]Tip:Sytsem.Windows.Forms.Timer组件并不提供多线程操作的功能,其是利用应用程序的idle moment触发其Tick事件完成相应的操作,操作的执行完全同一主线程中执行,这样UI更新、同步不是问题,但同时当你在Tick事件处理中完成time-consuming性操作时将会是问题(如非用户界面友好性等)。

总结.NET中异步通讯[读win control].NET中提供了几种Timer,其中有于其他线程完成操作的(即多线程),可参见:http:
//msdn.microsoft.com/msdnmag/issues/04/02/TimersinNET
总结.NET中异步通讯[读win control]

总结.NET中异步通讯[读win control]

 

 

异步委托的使用方式:
总结.NET中异步通讯[读win control]public delegate int doSomeDele(int para);//定义委托
总结.NET中异步通讯[读win control]
doSomeDele dsd = new doSomeDele(obj.method);//实例化委托
总结.NET中异步通讯[读win control]
//开始异步调用并注册callback函数,于异步线程中执行obj.method
总结.NET中异步通讯[读win control]
dsd.BeginInvoke(para,new AsyncCallBck(myCallBack),dsd);
总结.NET中异步通讯[读win control]
总结.NET中异步通讯[读win control]
private void myCallBack(IasyncResult async)//于异步线程中执行

异步委托的调用在涉及更新winAppui(也即主线程外的线程更新ui),将由controlInvokeReqired属性(如果当前code不是runningcontrol被创建的线程其值为true)和Invoke方法(在ui的线程上触发方法)完成。

总结.NET中异步通讯[读win control]//允许任意签名的委托


BackgroundWorker
组件的使用:

总结.NET中异步通讯[读win control]backgroundWorker.RunWorkerAsync(customObject);
总结.NET中异步通讯[读win control]
//当backgroundWorker获得线程后将触发DoWork事件,所以可以注册其事件处理
总结.NET中异步通讯[读win control]
//其中DoWorkEventArgs的Argument可获取传入的customObject,Result属性用
总结.NET中异步通讯[读win control]
//于保存获取的结果,此中执行任务
总结.NET中异步通讯[读win control]
void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
总结.NET中异步通讯[读win control]
//上述方法执行完毕backgroundWorker将触发RunWorkerCompleted事件
总结.NET中异步通讯[读win control]
//可于此进行UI相关操作,其中RunWorkerCompletedEventArgs的Result
总结.NET中异步通讯[读win control]
//属性用于获取上述方法中的结果
总结.NET中异步通讯[读win control]
void backgroundWorker_RunWorkerCompleted(object sender,
总结.NET中异步通讯[读win control]RunWorkerCompletedEventArgs e)
总结.NET中异步通讯[读win control]

另外BackgroundWorker还可提供report process功能,但除非自定义接口进行包装,否则将把线程任务和ui紧密耦合,当然亦可使用Thread取完成此功能。

 

System.Threading.Thread自不必多说(可说的太多了),完成.net的多线程编程,详细的多线程编程可参见具体书籍,如c# thread handbook等,等以后用的多了再总结。

相关文章:

  • 2021-07-19
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-10-08
  • 2021-08-30
  • 2021-08-29
  • 2022-01-16
相关资源
相似解决方案