首頁 >後端開發 >C#.Net教程 >C# WinForm跨執行緒存取控制項的圖文詳解

C# WinForm跨執行緒存取控制項的圖文詳解

黄舟
黄舟原創
2017-09-16 11:09:533965瀏覽

 問題出現:

# 在WinForm 處理多執行緒存取主執行緒的控制項時候,就會出現如圖所示的錯誤對話方塊:

#  

  

 

   

解決方案:

   

 方案一:去掉執行緒存取主執行緒UI控制項的安全檢查,使用:

 Control.CheckForIllegalCrossThreadCalls = false;

 

 方案二:使用委託,將對主執行緒的UI控制項操作推送了該執行緒的訊息佇列裡,使用的方法為:Invoke方法和BeginInvoke方法,前一個是同步方法,後者為非同步方法;

           使用同步invoke方法的程式碼如下,已通過測試:

   

          注意:使用非同步BeginInvoke方法的過程和同步invoke方法一樣,把invoke方法換成BeginInvoke方法就可以;##       方案三:使用同步上下文方法:SynchronizationContextation方法是取得主執行緒的上下文訊息,然後在子執行緒將存取UI控制方法推送到UI上下文的訊息佇列裡,使用POST或Send;

       

#方案四:在

命名空間: 

  System.ComponentModel 裡有個

BackgroundWorker類,它是在一個單獨的執行緒裡執行,下圖拷貝官網說明:

 

          程式碼如下,測試通過:

        

 

#           為什麼在winform上新增TextBox控件,然後透過另一個執行緒存取UI主執行緒的控件,不報錯,正常通過? ? ?煩請高手賜教! ! ! ######         圖如下:######        #######

以上是C# WinForm跨執行緒存取控制項的圖文詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn