C# 跨執行緒(thread)存取UI
C# 跨執行緒(thread)存取UI
在撰寫 Windows Form 時,當使用多個執行緒 (Thread),若需在不同執行緒下控制元件,會遇到「跨執行緒控制無效…」的問題。
目前參考網路上的解法有二:
01.直接對 Form 的屬性作改變,此法較不安全,若程式很單純不複雜,以此解即可:
Form.CheckForIllegalCrossThreadCalls = False
02.採委派的方式,此法較為正統,但撰寫上較為複雜:
private delegate void UpdateUICallBack(string value, Control ctl);
private void UpdateUI(string value, Control ctl)
{
if (this.InvokeRequired) {
UpdateUICallBack uu = new UpdateUICallBack(UpdateUI);
this.Invoke(uu , value, ctl);
}
else {
ctl.Text = value;
}
}
在需要存取控制項時作 Update UI 即可。