当使用多线程功能时,在子线程里修改UI控件参数时,如:
rtb_lock.Text += ch;
会出现异常;
`System.InvalidOperationException:“线程间操作无效: 从不是创建控件“rtb_lock”的线程访问它`
解决方法
1、在主函数里插入禁止捕获对错误线程的调用
`public Form1()
{
InitializeComponent();
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; //禁止捕获对错误线程的调用。
}`
但是该方法在调试时,会出现问题
{Text = 无法 表达式求值,因为函数计算需要运行所有线程。}
因此建议使用下面的方法
1.使用委托
this.Invoke(new EventHandler(delegate
{
rtb_lock.Text += ch;
}));
2.使用Lambda表达式
this.Invoke(new Action(() =>
{
rtb_lock.Text += ch;
}));