C# 跨线程调用控件
前提: 最近在用 winform 做一个小工具,需要开启一个后台任务,同时在主UI上更新当前状态。
如果在一个线程中更新某个控件的值,就会 抛出一个错误。
这是因为.NET禁止了跨线程调用控件, 否则话,谁都可以操作控件,最后可能造成错误。
解决方法:使用 控件的 invoke方法,就可以更新控件的值。
// 当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它 if (richTextBox1.InvokeRequired) { Action<string> updateAction = (txt) => { richTextBox1.AppendText(txt); }; richTextBox1.Invoke(updateAction, txt); } else { richTextBox1.AppendText(txt); }
Categories:
.net
已禁用评论。