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}";
}));
};