Loading... WinForm非常经典的一个问题,跨线程操作UI的时候会报错,处理方式: ## 简单粗暴款: 问就是不推荐,会出现一些奇怪的问题,比如我设置了标签值,但是却没有生效。 ```csharp CheckForIllegalCrossThreadCalls =false; ``` ## 使用委托款: 推荐,让创建界面的线程来负责更新它,即聚餐常说的谁点的谁来吃完。 定义一个委托: ```csharp /// <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(); //这两行实现光标定位到末尾,可以达到滚动输出效果 } ``` 触发它(更新值): ```csharp Invoke(SetLogTextBoxText, log, LogLevel.Error); ``` 最后修改:2023 年 01 月 12 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏