异步编程

小窗体实现异步编程编程

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AsyncDemo
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }

        private void btnExe1_Click(object sender, EventArgs e)
        {
            this.lblCount1.Text = ExectuteTask1(10).ToString();
            this.lblCount2.Text = ExectuteTask2(10).ToString();
        }

        // 二、根据委托定义实现方法
       

        private int ExectuteTask1(int num)
        {
            System.Threading.Thread.Sleep(5000); // 延迟5000ms
            return num * num;
        }

        private int ExectuteTask2(int num)
        {
            return num * num;
        }

        // 三、异步调用
        private void btnExe2_Click(object sender, EventArgs e)
        {
            MyCalculator objMycal = ExectuteTask1;//建立委托变量并表明方法1

            // 异步调用任务
            IAsyncResult result = objMycal.BeginInvoke(10,null,null);
            this.lblCount1.Text = "正在计算,请稍等...";

            // 同时执行其余任务
            this.lblCount2.Text = ExectuteTask2(10).ToString();

            // 获取异步计算结果
            int res = objMycal.EndInvoke(result);
            this.lblCount1.Text = res.ToString();
        }
    }

    // 一、定义委托
    public delegate int MyCalculator(int num);
}

 界面以下图所示:异步