Exemplo n.º 1
0
        /// <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进行转换
             * 特此说明
             */
        }
Exemplo n.º 2
0
        /// <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();
        }