>c#背景線程異常:“跨線程操作無效:控制'...'從其創建的線程以外的線程訪問。 >本文解決使用背景線程和UI元素時遇到的常見C#錯誤:“調用線程無法訪問此對象,因為另一個線程擁有它。” 之所以發生這種情況,是因為UI元素通常由主UI線程創建和擁有。 試圖從背景線程中修改它們會違反線程安全。
問題:
當背景線程嘗試訪問或修改主線程上創建的UI元素(例如文本框或其他控件)時,出現了異常。 WPF和其他UI框架強制執行此限制以防止種族條件和數據腐敗。
解決方案:使用>
Dispatcher.Invoke
該解決方案涉及使用>方法將UI更新授予主線程。
Dispatcher.Invoke
Dispatcher.Invoke
>示例代碼修改:
假設您有一個方法>在背景線程上運行,該線程需要更新一個名為
>的文本框:
GetGridData
txtSearchCountry
>使用
private void GetGridData(object sender, int pageIndex) { // ... other code ... objUDMCountryStandards.Country = txtSearchCountry.Text.Trim() != string.Empty ? txtSearchCountry.Text : null; // ... more code ... }
Dispatcher.Invoke
private void GetGridData(object sender, int pageIndex) { // ... other code ... this.Dispatcher.Invoke(() => { objUDMCountryStandards.Country = txtSearchCountry.Text.Trim() != string.Empty ? txtSearchCountry.Text : null; }); // ... more code ... }
Dispatcher.Invoke
>通過使用Dispatcher.Invoke
,現在安全地在主UI線程上執行了分配,以防止例外。 請記住,將此模式應用於從背景線程執行的所有UI元素修改。
以上是為什麼我的C#背景線程拋出'調用線程無法訪問此對象”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!