改编自网上的一个例子程序。
异步调用的基础知识。
更复杂的应用还在研究中。
复制
保存
原文出处:http://www.chenjiliang.com/Article/View.aspx?ArticleID=2294&TypeID=98
异步调用的基础知识。
更复杂的应用还在研究中。
保存public class MyAsync
{
public delegate string LengthyProcedureAsyncStub(int milliseconds);
public string LengthyProcedure(int milliseconds)
{
System.Threading.Thread.Sleep(milliseconds);//测试,让当前线程中止一段时间。
return "成功";
}
/// <summary>
/// 让别人来异步调用的开始
/// </summary>
/// <param name="milliseconds">原来函数的参数</param>
/// <param name="callback">
/// 希望得到回调的函数。必须是声明为被异步调用的函数
/// 比如AsyncCallback callback = new AsyncCallback(GetResult);
/// 而GetResult函数应该是这样的private void GetResult(IAsyncResult ar)
/// 他会如此使用:xxx.Endxxx()
/// </param>
/// <param name="s">
/// 为了处理用户的数据结构。
/// 不是必须的。也可以没有
/// </param>
/// <returns></returns>
public IAsyncResult BeginLengthyProcedure(int milliseconds, AsyncCallback callback)
{
//让别人来异步调用的开始
LengthyProcedureAsyncStub stub = new LengthyProcedureAsyncStub(LengthyProcedure);
//开始执行委托:BeginInvoke。仅仅是开始执行。然后就返回。
//这里只是借助委托的异步处理机制来完成。
//3部分参数:函数本身的参数;callback异步函数;函数本身的委托
IAsyncResult result = stub.BeginInvoke(milliseconds, callback, stub);
//返回IAsyncResult
return result;
}
/// <summary>
/// 因为callback被注册到了委托的异步处理中,
/// 所以当这个委托被处处理之后,就会回调callback函数。
/// 这时候,那个callback就可以如此使用结果了:
/// result=xxx.Endxxx();
/// 这里就是那个Endxxx。
/// 这里就是提供result的函数
/// </summary>
/// <param name="result">异步结果</param>
/// <returns>这里的返回值是函数本身的返回值</returns>
public string EndLengthyProcedure(IAsyncResult result)
{
//这里只是提供结果。
//从result中取出自己传进去的参数:委托。然后使用这个委托的endinvoke方法来获取结果
LengthyProcedureAsyncStub stub = (LengthyProcedureAsyncStub) result.AsyncState;
string res = stub.EndInvoke(result);
return res;
}
}
原文出处:http://www.chenjiliang.com/Article/View.aspx?ArticleID=2294&TypeID=98

浙公网安备 33010602011771号