当前位置:嗨网首页>书籍在线阅读

15-高手点拨

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

21.4 高手点拨

**本节视频教学录像:2分钟**

基于事件的异步模型(Event-Based Asynchronous EBA)提供了一个简单的方式来使用多线程编程,提供了多线程能力的同时而不用显式地打开或者管理线程;同时提供了一个取消模型,可以安全地更新WPF和WindowsFormsControl的属性。

EAP只是一个模型,这些特性必须要采用实际的代码来实现。在.NET Framework中最明显的就是BackgroundWorker类、WebClient类等。这些类中的方法以Async结尾的方法就是异步执行的:它们新打开一个线程,将结果返回给调用的方法,当执行完毕之后调用以Completed结尾的方法来处理,这个方法会自动调用Invoke方法(WPF和WindowForms中)。

BackgroundWorker类是一个System.ComponentModel命名空间中的辅助类,这是一个一般意义上EAP模型的实现。下面的代码实例化一个BackgroundWorker类的对象,并且通过RunWorkerAsync方法调用DoWork方法,并提供一个对象类型的参数。

01   static BackgroundWorker _bw = new BackgroundWorker();
02  static void Main()
03   {
04       _bw.DoWork += bw_DoWork;
05       _bw.RunWorkerAsync ("Message to worker");
06       Console.ReadLine();
07   }
08   static void bw_DoWork (object sender, DoWorkEventArgs e)
09   {
10       Console.WriteLine (e.Argument);
11   }

上例中,RunWorkerAsync方法将参数传递给DoWork方法。同时在DoWork方法执行完毕之后,由一个RunWorkerCompleted事件来处理执行完毕之后的动作。