中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#編程報錯System.InvalidOperationException怎么解決

發布時間:2022-05-20 14:28:11 來源:億速云 閱讀:3811 作者:iii 欄目:開發技術

這篇文章主要講解了“C#編程報錯System.InvalidOperationException怎么解決”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C#編程報錯System.InvalidOperationException怎么解決”吧!

C#報錯System.InvalidOperationException

問題場景

在C# Windows GUI編程中,從某個子線程去訪問設計器中的某個控件,例如將某個按鈕禁用。這樣就會觸發該異常:

System.InvalidOperationException:"線程間操作無效: 從不是創建控件"btn_exp"的線程訪問它。"

問題原因

在C# Windows GUI編程中有一個規則,就是只能通過創建控件的線程來訪問控件,否則就可能產生不可預料的結果。

解決方案

方案一,打破規則

在構造函數中加入以下語句:

Control.CheckForIllegalCrossThreadCalls = false;

將以上屬性設置為假則會取消對非法跨線程調用進行檢查,簡單粗暴但不保證不出錯。

方案二,利用委托(Delegate)

.net為我們提供了Invoke 方法與BeginInvoke方法去調用委托,它們的區別在于前者是線程阻塞的,后者是異步的。

因此當委托是一個較為耗時的函數時,Invoke 方法就會導致線程阻塞,表現為用戶界面卡頓;而BeginInvoke方法則不會等待委托執行完畢。

雖然BeginInvoke方法不會導致線程阻塞,但可以使用EndInvoke方法或者其它類似WaitHandle機制等待異步操作的完成。

BeginInvoke(new MethodInvoker(()=>
{
    btn_exp.Enabled = false;
}));

其中,MethodInvoker委托 與EventHandler 委托的區別在于前者是不帶參數的:

public delegate void MethodInvoker();
public delegate void EventHandler(object sender, EventArgs e);

c# WPF InvalidOperationException異常的幾種常見原因

什么是InvalidOperationException

操作無效異常。當方法調用對對象的當前狀態無效時引發的異常。

繼承

  • Object

  • Exception

  • SystemException

詳細說明

如果調用方法失敗是由無效參數以外的其他原因導致的,則使用該異常。通常, 當對象的狀態不支持方法調用時, 將引發此異常。

例如, 以下方法或原因會引發異常nvalidOperationException:

  • IEnumerator.MoveNext如果在創建枚舉器后修改集合的對象,。

  • ResourceSet.GetString如果在執行方法調用前關閉資源集,。

  • XContainer.Add如果要添加的對象將導致結構不正確的 XML 文檔,。

  • 嘗試從非主線程或 UI 線程的線程操作 UI 的方法。

  • 從非 UI 線程更新 UI 線程(跨UI線程調用,樓主就是因為這個原因,在線程里調用的UI控件導致報錯!)

  • 在循環訪問集合時更改集合

  • 對其對象無法進行比較的數組或集合進行排序

  • 將為 null <T>轉換為其基礎類型

  • 對空集合調用 system.exception 方法

  • 對沒有一個元素的序列調用 SingleOrDefault 或可枚舉的。

  • 動態跨應用程序域字段訪問

由于InvalidOperationException異常可以在多種情況下引發,因此讀取由message屬性返回的異常消息非常重要。

HRESULT

InvalidOperationException使用 COR_E_INVALIDOPERATION 值為0x80131509 的 HRESULT。

感謝各位的閱讀,以上就是“C#編程報錯System.InvalidOperationException怎么解決”的內容了,經過本文的學習后,相信大家對C#編程報錯System.InvalidOperationException怎么解決這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

无锡市| 石渠县| 石林| 滦南县| 尖扎县| 乌兰浩特市| 浠水县| 石林| 乌拉特前旗| 高碑店市| 顺义区| 晴隆县| 轮台县| 太湖县| 工布江达县| 连江县| 石泉县| 葵青区| 定襄县| 濮阳县| 庆城县| 亚东县| 阿坝县| 武川县| 英德市| 江源县| 江口县| 黔东| 凤冈县| 简阳市| 唐河县| 安徽省| 武陟县| 南通市| 泾源县| 北碚区| 鄂托克旗| 澜沧| 富阳市| 江口县| 北辰区|