【WinForm】在线程中更新UI组件状态的方法

本文详细讲解了如何在Windows Forms中使用BeginInvoke方法在主线程之外更新UI组件,通过委托、泛型委托和匿名方法的形式展示,提高多线程环境下richTextBox1内容的异步添加效率。
摘要由CSDN通过智能技术生成
  1. 在窗体中代码中,更新UI线程方法的是InvokeBeginInvoke,是目前写得最少最好用的方法
//
// 摘要:
//     在创建控件的基础句柄所在线程上异步执行指定委托。
//
// 参数:
//   method:
//     对不带参数的方法的委托。
//
public IAsyncResult BeginInvoke(Delegate method);
//
// 摘要:
//     在创建控件的基础句柄所在线程上,用指定的自变量异步执行指定委托。
//
// 参数:
//   method:
//     一个方法委托,它采用的参数的数量和类型与 args 参数中所包含的相同。
//
//   args:
//     作为给定方法的参数传递的对象数组。 如果不需要自变量,则可以为 null。
//
public IAsyncResult BeginInvoke(Delegate method, params object[] args);
  1. 来一个使用的例子,线程中更新多行文本框组件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);
}
  1. 还可以,使用泛型委托
//先定义
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);
}
  1. 还能简化,使用匿名方法
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);
}
  1. 最终,简化方法代码如下,到此结束
private void receive(object sender1, DataReceivedEventArgs e1) {
     string data = e1.Data;
     //泛型委托 匿名方法 简化
     this.BeginInvoke(new Action<String>(delegate (String msg)
     {
         richTextBox1.Text += msg;
     }), data);
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TA远方

谢谢!收到你的爱╮(╯▽╰)╭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值