//AsyncCallback asyncCallback; //实例化回调 全局变量 //AsyncObjectStateClass asyncObjectState; //实例化传入参数 全局变量 //AsyncMethodReturnObject asyncMethodReturnObject;//实例化返回结果 全局变量 /// <summary> /// 申明供异步委托调用的任务执行函数 /// </summary> /// <returns></returns> private AsyncMethodReturnObject asyncMethodTask(AsyncMethodParameterObject sleepAsyncMethodParameterObject) { int sleepMS = (int)sleepAsyncMethodParameterObject.parameterObject; ParallelLoopResult result = Parallel.For(0, 1, i => { Thread.Sleep(sleepMS); if (DoSomethingInAsyncTaskDemo != null) { DoSomethingInAsyncTaskDemo(this, sleepMS); } else { } }); return(new AsyncMethodReturnObject((sleepMS - 1000).ToString())); }
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")); }); } }