C# 跨執行緒(thread)存取UI

C# 跨執行緒(thread)存取UI

C# 跨執行緒(thread)存取UI

 

資料來源:https://georgiosky2000.wordpress.com/2013/11/24/c-form-%E8%B7%A8%E5%9F%B7%E8%A1%8C%E7%B7%92%E5%AD%98%E5%8F%96ui/

 

在撰寫 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 即可。

 

 

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *