/// <summary> /// 5 回调函数 需要异步结果接口作为参数,以区分多个异步任务时区分各个该异步方法的执行结果 /// </summary> /// <param name="result"></param> static private void MyCallback(IAsyncResult result) { int r = objCalculatorDelegate.EndInvoke(result); Console.WriteLine("第{0}个计算结果为{1}", result.AsyncState.ToString(), r); /* 特此说明 * BeginInvoke的第三个参数是回调函数的参数,可以是多种类型=异步结果接口对象中 * 的.AsyncState字段,类型需要从object进行转换 * 特此说明 */ }
/// <summary> /// 异步执行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnTask2_Click(object sender, EventArgs e) { //3实例化委托对象 并赋值需要引用的方法 CalculatorDelegate objCalculatorDelegate = ExecTask1; //1开始异步调用 //通过委托的BeginInvoke方法进行异步调用 //BeginInvoke是异步调用的核心 IAsyncResult result = objCalculatorDelegate.BeginInvoke(35, null, null); //2并行执行其他任务 lblResult1.Text = "正在计算,请稍等..."; lblResult2.Text = ExecTask2(55).ToString(); //3获取异步执行结果 借助IAsyncResult接口对象 不断查询异步调用是否结束 //该接口对象有异步调用方法的所有参数,调用结束后取出结果作为返回值 int r = objCalculatorDelegate.EndInvoke(result); lblResult1.Text = r.ToString(); }