//////asyncDelegate asyncDelegateTask; 全局变量 /// <summary> /// 申明供异步委托调用的任务回调函数,即根据任务完成情况做出响应 /// </summary> /// <param name="iAsyncResult"></param> private void callBackAsyncDelegate(IAsyncResult iAsyncResult) { if (true) { ////while (!iar.IsCompleted) ////{ //// //这里可以执行其他代码 ////} AsyncObjectStateClass asyncObjectState = (AsyncObjectStateClass)(iAsyncResult.AsyncState);//通过AsyncState获取传入的object AsyncResult result = (AsyncResult)iAsyncResult; asyncDelegate caller = (asyncDelegate)result.AsyncDelegate; //任务执行函数 AsyncMethodReturnObject asyncMethodReturnObject = caller.EndInvoke(iAsyncResult); //通过EndInvoke获取异步结果,注意每个asyncDelegate的EndInvoke只能使用一次。 if (ShowMessageInAsyncCallbackDemo != null) { ShowMessageInAsyncCallbackDemo(this, asyncObjectState.message); ShowMessageInAsyncCallbackDemo(this, (asyncMethodReturnObject).returnObject.ToString()); } else { } } else { iAsyncResult.AsyncWaitHandle.WaitOne();//等待方法调用的完成 } }
public async Task taskStartAsyncDelegate(object sleepMS) { if (true) { await Task.Run(() => { AsyncMethodParameterObject asyncMethodParameterObject = new AsyncMethodParameterObject(sleepMS); asyncDelegate asyncDelegateTask = new asyncDelegate(asyncMethodTask); AsyncCallback asyncCallback = new AsyncCallback(callBackAsyncDelegate); AsyncObjectStateClass asyncObjectState = new AsyncObjectStateClass(sleepMS); //实例化类,该对象可以传入回调函数中 IAsyncResult iar = (AsyncResult)asyncDelegateTask.BeginInvoke(asyncMethodParameterObject, asyncCallback, asyncObjectState); //异步执行Method,界面不会假死,后执行回调函数,弹出提示框 }); } else //lambda形式 { await Task.Run(() => { //回调函数callback方法可以改写成lambda形式 //AsyncMethodParameterObject asyncMethodParameterObject = new AsyncMethodParameterObject(sleepMS); new asyncDelegate(asyncMethodTask).BeginInvoke(new AsyncMethodParameterObject(sleepMS), ar => { //回调函数写成了lambda形式 // Retrieve the delegate. AsyncResult result = (AsyncResult)ar; asyncDelegate caller = (asyncDelegate)result.AsyncDelegate; // Retrieve the format string that was passed as state information. AsyncObjectStateClass asyncObjectState = (AsyncObjectStateClass)ar.AsyncState;//通过AsyncState获取传入的object // Call EndInvoke to retrieve the results. AsyncMethodReturnObject asyncMethodReturnObject = caller.EndInvoke(ar); //MessageBox.Show(formatString.ToString() + "\n\r" + returnValue); }, new AsyncObjectStateClass("Return String")); }); } }