問題出現:
# 在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中文網其他相關文章!