您的位置:首页 > 其它

利用AsyncCallback将同步方法转为异步执行

2012-02-13 14:23 169 查看

C#中,如果希望一个方法能够异步执行,可以创建线程,也可以使用AsyncCallback,后者更简单。

假设有一个方法对给定的两个整数进行复杂运算,会耗费较长时间:

  1. public void Compute(int x, int y)  
  2. {  
  3.     //计算过程省略 
  4.     return ......;  
  5. }  

先为其定义一个委托:

  1. public delegate void AsyncComputeCaller(int x, int y); 

需要异步调用的时候,执行如下代码:

  1. AsyncComputeCaller caller = new AsyncComputeCaller(this.Compute); 
  2. AsyncCallback callback = new AsyncCallback(ComputeCallback); 
  3. caller.BeginInvoke(X, Y, callback, caller); 

BeginInvoke方法不会阻塞,实现了异步调用。其中ComputeCallback为回调方法,内容如下:

  1. private void ComputeCallback(IAsyncResult result) 
  2.     AsyncComputeCaller caller = (AsyncComputeCaller)result.AsyncState; 
  3.     caller.EndInvoke(result); 

在此方法中可以做一些后续的处理,由于它可以在UI线程中,因此直接更新界面控件不会有问题。

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: