WinForm非常经典的一个问题,跨线程操作UI的时候会报错,处理方式:

简单粗暴款:

问就是不推荐,会出现一些奇怪的问题,比如我设置了标签值,但是却没有生效。

CheckForIllegalCrossThreadCalls =false;

使用委托款:

推荐,让创建界面的线程来负责更新它,即聚餐常说的谁点的谁来吃完。

定义一个委托:


        /// <summary>
        /// 设置日志控件值
        /// </summary>
        /// <param name="text"></param>
        /// <param name="logLevel">1=Info 2=Success 3=Error</param>
        private void SetLogTextBoxText(string text, LogLevel logLevel = LogLevel.Info)
        {
            log_richTextBox.SelectionStart = log_richTextBox.TextLength;
            log_richTextBox.SelectionLength = 0;
            log_richTextBox.SelectionColor = logLevel switch
            {
                LogLevel.Info => Color.Black,
                LogLevel.Success => Color.Green,
                LogLevel.Error => Color.Red,
                _ => log_richTextBox.ForeColor
            };
            log_richTextBox.AppendText(text);
            log_richTextBox.SelectionColor = log_richTextBox.ForeColor;
        //以上实现控制输出内容的颜色,比如这次输出红色,下次输出绿色
            log_richTextBox.SelectionStart = log_richTextBox.TextLength;
            log_richTextBox.ScrollToCaret();
        //这两行实现光标定位到末尾,可以达到滚动输出效果
        }

触发它(更新值):

 Invoke(SetLogTextBoxText, log, LogLevel.Error);
最后修改:2023 年 01 月 12 日
如果觉得我的文章对你有用,请随意赞赏