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

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

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

先为其定义一个委托:

  1. public delegate void AsyncComputeCaller(int xint 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线程中,因此直接更新界面控件不会有问题。