Invoke或者begininvoke,委托。
用于在子线程中,执行主线程UI操作时。他的使用必然伴随着Task或者Thread。
private void button4_Click(object sender, EventArgs e)
{
Task t = new Task(()=>{
Thread.Sleep(30000);
});
t.Start();
t.ContinueWith(t1 => {
this.Invoke(new EventHandler(delegate
{
textBox1.Text += "OK";
}));
Thread.Sleep(2000);
});
}
EventHandler本质:
using System.Runtime.InteropServices;
namespace System
{
// 摘要:
// 表示将处理不包含事件数据的事件的方法。
//
// 参数:
// sender:
// 事件源。
//
// e:
// 不包含任何事件数据的 System.EventArgs。
[Serializable]
[ComVisible(true)]
public delegate void EventHandler(object sender, EventArgs e);
}
1、Invoke几种写法:https://blog.csdn.net/thanks_hck/article/details/97273977
2、delegatee进阶(小明买书):https://www.cnblogs.com/xuxiaoshuan/p/6844511.html
优化以后的代码:
private void button4_Click(object sender, EventArgs e)
{
Task t = new Task(()=>{
Thread.Sleep(30000);
});
t.Start();
t.ContinueWith(t1 => {
this.Invoke(new Action(delegate
{
textBox1.Text += "OK";
}));
Thread.Sleep(2000);
});
}
Action本质:
using System.Runtime.CompilerServices;
namespace System
{
// 摘要:
// 封装一个方法,该方法不具有参数并且不返回值。
[TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
public delegate void Action();
}
C#委托的介绍(delegate、Action、Func、predicate) :https://www.cnblogs.com/akwwl/p/3232679.html