C# 跨线程调用控件

前提: 最近在用 winform 做一个小工具,需要开启一个后台任务,同时在主UI上更新当前状态。

如果在一个线程中更新某个控件的值,就会 抛出一个错误。
这是因为.NET禁止了跨线程调用控件, 否则话,谁都可以操作控件,最后可能造成错误。
解决方法:使用 控件的 invoke方法,就可以更新控件的值。

            // 当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它
            if (richTextBox1.InvokeRequired)
            { 
                Action<string> updateAction = (txt) =>
                {
                    richTextBox1.AppendText(txt);
                };

                richTextBox1.Invoke(updateAction, txt);
            }
            else
            {
                richTextBox1.AppendText(txt);
            }