C# 解决在不同线程中对控件进行操作引发异常,实现页面动态刷新

it2026-09-23  21

通过多线程技术可以解决人机交互中由于耗时的UI操作,从而造成界面的假死问题。 要求:查阅相关资料,对代码进行改进,以解决由于在不同线程中对控件进行操作从而引发的异常,最终实现界面的动态刷新。

解决方案

1. 在构造方法里面加入 Control.CheckForIllegalCrossThreadCalls = false;

windows GUI编程有一个规则,只能通过创建控件的线程来操作控件的数据,否则就可能产生不可预料的结果。

此方法通过将CheckForIllegalCrossThreadCalls属性的值设置为 false 来禁用此异常 public Form1() { InitializeComponent(); System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; }

2. 使用 Invoke 调用委托

Invoke & BeginInvoke 可参考 👉 c# Invoke 与BeginInvoke 的用法 // 定义委托 delegate int MyDelegate(object i); MyDelegate myDelegate = null; public Form1() { InitializeComponent(); // System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; } // 点击按钮运行 private void BtLoadData_Click(object sender, EventArgs e) { myDelegate = new MyDelegate(LstData.Items.Add); ThreadStart threadStart = LoadData; Thread thread = new Thread(threadStart); thread.IsBackground = true; thread.Start(); } // 定义方法,驱动消息 private void LoadData() { for (int i = 0; i < 100; i++) { Thread.Sleep(100); this.BeginInvoke(myDelegate, new object[] {i}); } }
最新回复(0)