改编自网上的一个例子程序。
异步调用的基础知识。
更复杂的应用还在研究中。
原文出处: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