第一步:定义委托
第二步:根据委托的定义,创建一个方法
第三部:创建委托变量
第四部:在窗口初始化中委托变量方法
第五步:开始异步,设置回调函数
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 异步编程 { public partial class Form1 : Form { public Form1() { InitializeComponent(); /*第四步*/ this.objdeleTask = new deleTask(Task1);//初始化委托的方法 /* 或者用匿名的方法 * this.objdeleTask = (num, ms) => { System.Threading.Thread.Sleep(ms); return num * num; };*/ } /*第一步*/ public delegate int deleTask(int num, int ms);//定义委托 /*第三步*/ deleTask objdeleTask = null;//定义委托变量 /// <summary> /// 委托任务 /// </summary> /// <param name="num"></param> /// <param name="ms"></param> /// <returns></returns> /*第二步*/ private int Task1(int num, int ms) { System.Threading.Thread.Sleep(ms); return num * num; } /// <summary> /// 异步结束回调函数 /// </summary> /// <param name="ia"></param> private void CallBack(IAsyncResult ia) { int res = objdeleTask.EndInvoke(ia); //调取委托计算结果 Console.WriteLine("i的值{0},计算结果{1}", ((int[])(ia.AsyncState))[1].ToString(), res);//ia.AsyncState是回调参数 // label1.Text = res.ToString();这句不调试可以使用, } private void button1_Click(object sender, EventArgs e) { for (int i = 0; i < 10; i++) { object ob = new int[] { 1, i }; /*第五步*/ objdeleTask.BeginInvoke(i * 10, 1000, CallBack, ob);//触发十个线程,前两个是参数,之后是回调函数的方法名字,以及回调参数 System.Threading.Thread.Sleep(200); } } } }
原文:http://www.cnblogs.com/xping2016/p/6339485.html