[ C# Form ] 跨執行緒存取UI

在撰寫 Windows Form 時,當使用多個執行緒 (Thread),

若需在不同執行緒下控制元件,會遇到「跨執行緒控制無效…」的問題。

目前參考網路上的解法有二:

  1. 直接對 Form 的屬性作改變,此法較不安全,若程式很單純不複雜,以此解即可:
    Form.CheckForIllegalCrossThreadCalls = False
  2. 採委派的方式,此法較為正統,但撰寫上較為複雜:
      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;  
          }  
      }
    在需要存取控制項時作 UpdateUI 即可。

參考文章 : mOMo’s BLOG

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s