Winform在子线程会中访问UI控件—— “从不是创建控件的线程访问它“

当在Winform的子线程尝试修改UI控件如textBox的text时,会抛出跨线程访问错误。正确做法是使用Invoke方法结合委托来安全更新UI。例如,在WebSocket连接打开的事件处理中,应使用Invoke确保在主线程中更新textBox,避免报错。
摘要由CSDN通过智能技术生成

Winform在子线程会中访问UI控件(textbox.text)时报错:从不是创建控件的线程访问它。

  • 出错原因:跨线程更新UI信息出错

  • 拯救方法:通过委托去更新

报错的例子:以下为子线程内容,在该线程中修改了textBox的text值

//连上websocket
socket.OnOpen = () =>
                { 
                    //报错的写法
                    textBox1.Text = $"有新用户连入:{socket.ConnectionInfo.ClientIpAddress} \n {textBox1.Text}";                   
                };
  • 正确用法
    Invoke(Delegate)
//连上websocket
socket.OnOpen = () =>
                {
                    this.Invoke(new Action(() =>
                    {
                        textBox1.Text += $"有新用户连入:{socket.ConnectionInfo.ClientIpAddress} {Environment.NewLine} {textBox1.Text}";                      
                    }));                 
                };            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值