WPF [調用線程無法訪問此對象,因為另一個線程擁有該對象。] 解決方案


WPF [調用線程無法訪問此對象,因為另一個線程擁有該對象。] 與 Winfrom [線程間操作無效: 從不是創建控件“label1”的線程訪問它。]錯誤同屬於在線程中操作界面UI元素導致。

解決方法: 
WPF:Dispatcher.Invoke 方法,只有在其上創建 Dispatcher 的線程才可以直接訪問 DispatcherObject。若要從不同於在其上創建 DispatcherObject 的線程的某個線程訪問 DispatcherObject,請對與 DispatcherObject 關聯的 Dispatcher 調用 Invoke 或 BeginInvoke。需要強制線程安全的 DispatcherObject 的子類可以通過對所有公共方法調用 VerifyAccess 來強制線程安全。這樣可以保證調用線程是在其上創建 DispatcherObject 的線程。 
代碼: 

 
  1. this.lbl.Dispatcher.Invoke(new Action(()=>{ this.lbl.Text = "this is a test!!!"; }));

Winfrom:Control.Invoke 方法 (Delegate),在擁有此控件的基礎窗口句柄的線程上執行指定的委托。 
代碼: 

 
    1. this.lbl.Invoke(new Action(()=>{ this.lbl.Text = "this is a test!!!"; }));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM