我创建的是一个winform测试项目:界面如下:
下面是代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace 异步编程 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /// <summary> /// 同步调用 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { labelCount1.Text = ExecuteTask1(10).ToString(); labelCount2.Text = ExecuteTask2(10).ToString(); } //任务一 private int ExecuteTask2(int v) { return v; } //任务2 private int ExecuteTask1(int v) { Thread.Sleep(5000);//延迟五秒 return v; } /// <summary> /// 异步调用 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { MyCalculator objMyCal = ExecuteTask1; //启用异步调用任务 IAsyncResult result = objMyCal.BeginInvoke(10, null, null); labelCount1.Text = "正在计算....."; //执行其他任务 labelCount2.Text = ExecuteTask2(22).ToString(); //获取异步执行结果 int res = objMyCal.EndInvoke(result); labelCount1.Text = res.ToString(); } //定义一个委托 public delegate int MyCalculator(int num); } }