第一步:定义委托
第二步:根据委托的定义,创建一个方法
第三部:创建委托变量
第四部:在窗口初始化中委托变量方法
第五步:开始异步,设置回调函数
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);
}
}
}
}
来源:https://www.cnblogs.com/xping2016/p/6339485.html