通过多线程技术可以解决人机交互中由于耗时的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();
}
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
});
}
}