大家好,欢迎来到IT知识分享网。
用于 方法类 的异步调用。
与普通调用的区别:普通方法的调用是主线程运行。比如delay_us(1000);主线程会等待该方法运行完再执行下一个方法。BeginInvoke是用其他线程去运行方法。就像让秘书去工作,自己的工作不会受影响。
既然是方法的异步调用,那就要先声明一个方法。
//AsyncCallback
Func<double, double, double, string> cnc = (X, Y, Z) =>
{
System.Threading.Thread.Sleep(30);
return “完成”;
};
//Func规定最后一个参数是返回类型。cnc方法的返回类型那就是string
//cnc参数就是X, Y, Z和前面double对应
//=>表示右边是方法体
private void button1_Click(object sender, EventArgs e)
{
IAsyncResult data = cnc.BeginInvoke(1.1, 2.2, 3.3, end, “执行回调”);
//label1.Text = cnc.EndInvoke(data);
}
//button1_Click是按键事件
//cnc.BeginInvoke要在cnc的参数基础上追加2个参数(下个回调方法名,下个回调参数),作用是这个cnc方法运行完毕后再执行的下一个方法end,他的参数是 “执行回调” 如果不需要就填null,null
//可以看成cnc(1.1, 2.2, 3.3);执行完后再运行end(“执行回调”);
private void end(IAsyncResult a)//参数必须是IAsyncResult类型
{
textBox1.Invoke(new Action<string>
(匿名方法名 => { textBox1.Text = cnc.EndInvoke(a); })
, a.ToString());
}
//textBox1.Invoke用于跨线程方法
//Action<string>表示一个无返回值的方法,他的参数是string类型
//cnc.EndInvoke(a);//表示等这个方法运行完
//a.ToString();是因为Action<string>这方法的参数是string类型。
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 线程3回调函数
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
IAsyncResult data = cnc.BeginInvoke(1.1, 2.2, 3.3, end, "执行回调");
//label1.Text = cnc.EndInvoke(data);
}
//AsyncCallback
Func<double, double, double, string> cnc = (X, Y, Z) =>
{
System.Threading.Thread.Sleep(30);
return "完成";
};
private void end(IAsyncResult a)//参数必须是IAsyncResult类型
{
textBox1.Invoke(new Action<string>
(匿名方法名 => { textBox1.Text = cnc.EndInvoke(a); })
, a.ToString());
}
}
}
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15844.html