- 在窗体中代码中,更新UI线程方法的是Invoke和BeginInvoke,是目前写得最少最好用的方法
public IAsyncResult BeginInvoke(Delegate method);
public IAsyncResult BeginInvoke(Delegate method, params object[] args);
- 来一个使用的例子,线程中更新多行文本框组件
richTextBox1
的内容,实现代码如下
delegate void Func(String msg);
private void receive(object sender1, DataReceivedEventArgs e1) {
string data = e1.Data;
Func fun = delegate (String msg)
{
richTextBox1.Text += msg;
};
this.BeginInvoke(fun, data);
}
- 还可以,使用泛型委托
delegate void Func(String msg);
private void receive(object sender1, DataReceivedEventArgs e1) {
string data = e1.Data;
Func fun = delegate (String msg)
{
richTextBox1.Text += msg;
};
var fun2 = new Action<String>(fun);
this.BeginInvoke(fun2, data);
}
- 还能简化,使用匿名方法
private void receive(object sender1, DataReceivedEventArgs e1) {
string data = e1.Data;
var fun2 = new Action<String>(delegate (String msg)
{
richTextBox1.Text += msg;
});
this.BeginInvoke(fun2, data);
}
- 最终,简化方法代码如下,到此结束
private void receive(object sender1, DataReceivedEventArgs e1) {
string data = e1.Data;
this.BeginInvoke(new Action<String>(delegate (String msg)
{
richTextBox1.Text += msg;
}), data);
}