**方法说明**
#1.BeingInovke是开始执行一个异步操作
#2.EndInvoke是阻塞等待BeingInvoke的执行结果
#3.Invoke方法是执行跨线程访问控件
**代码实例**``
使用流程介绍
<1>.异步操作的基础是委托
<2>.定义一个委托
<3>.委托绑定方法
<4>.委托的BeingInvoke方法
<5>.书写回调方法
<6>委托的EndInvoke的方法
[1].定义一个委托
public delegate string ShowString();
[2]. 委托绑定方法
ShowString show;
show = new ShowString(GetString);
[3].委托的BeginInvoke方法
resutl = show.BeginInvoke(SetString, null); // 参数1.回调方法 2.需要传递给回调方法参数
[4].委托的EndInvoke方法
show.EndInvoke(resutl)
[5].跨线程Invoke方法
if (label1.InvokeRequired)
{
label1.Invoke(new Action(() =>
{
label1.Text = i.ToString();
}
));
}
**源码:**
public delegate string ShowString();
public Form1()
{
InitializeComponent();
}
IAsyncResult resutl;
ShowString show;
private void button1_Click(object sender, EventArgs e)
{
show = new ShowString(GetString);
resutl = show.BeginInvoke(SetString, null);
MessageBox.Show("执行结束");
}
private void SetString(IAsyncResult ar)
{
MessageBox.Show("回调方法");
MessageBox.Show(show.EndInvoke(resutl));
}
private string GetString()
{
string str = "";
for (int i = 0; i < 200; i++)
{
Thread.Sleep(1);
if (label1.InvokeRequired)
{
label1.Invoke(new Action(() =>
{
label1.Text = i.ToString();
}
));
}
str = i.ToString();
}
return str;
}
执行结果:
Label1.值实时显示
弹窗"执行结束"
弹窗“回调方法”
弹窗"199"
执行流程 启动异步与主函数同时执行-> 开始执行异步函数->执行结束->执行回调函数并获取异步执行结果。