欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#編程報錯System.InvalidOperationException問題及解決

 更新時間:2022年05月20日 11:57:08   作者:blingbling_110  
這篇文章主要介紹了C#編程報錯System.InvalidOperationException問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

C#報錯System.InvalidOperationException

問題場景

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

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

問題原因

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

解決方案

方案一,打破規(guī)則

在構造函數(shù)中加入以下語句:

Control.CheckForIllegalCrossThreadCalls = false;

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

方案二,利用委托(Delegate)

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

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

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

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

其中,MethodInvoker委托 與EventHandler 委托的區(qū)別在于前者是不帶參數(shù)的:

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

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

什么是InvalidOperationException

操作無效異常。當方法調用對對象的當前狀態(tài)無效時引發(fā)的異常。

繼承

詳細說明

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

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

  • IEnumerator.MoveNext如果在創(chuàng)建枚舉器后修改集合的對象,。
  • ResourceSet.GetString如果在執(zhí)行方法調用前關閉資源集,。
  • XContainer.Add如果要添加的對象將導致結構不正確的 XML 文檔,。
  • 嘗試從非主線程或 UI 線程的線程操作 UI 的方法。
  • 從非 UI 線程更新 UI 線程(跨UI線程調用,樓主就是因為這個原因,在線程里調用的UI控件導致報錯!)
  • 在循環(huán)訪問集合時更改集合
  • 對其對象無法進行比較的數(shù)組或集合進行排序
  • 將為 null <T>轉換為其基礎類型
  • 對空集合調用 system.exception 方法
  • 對沒有一個元素的序列調用 SingleOrDefault 或可枚舉的。
  • 動態(tài)跨應用程序域字段訪問

由于InvalidOperationException異??梢栽诙喾N情況下引發(fā),因此讀取由message屬性返回的異常消息非常重要。

HRESULT

InvalidOperationException使用 COR_E_INVALIDOPERATION 值為0x80131509 的 HRESULT。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 簡單聊聊C#字符串構建利器StringBuilder

    簡單聊聊C#字符串構建利器StringBuilder

    因為String類型代表不可變字符串,所以無法對當前String類型實例進行處理.所以FCL提供了System.Text.StringBuilder類型,下面這篇文章主要給大家介紹了關于C#字符串構建利器StringBuilder的相關資料,需要的朋友可以參考下
    2022-03-03
  • C#自定義的方法實現(xiàn)堆棧類設計

    C#自定義的方法實現(xiàn)堆棧類設計

    這篇文章主要為大家詳細介紹了如何使用C#創(chuàng)建一個帶有Push方法和Clist類的CStack類,并如何在其中添加和遍歷堆棧數(shù)據(jù),感興趣的可以了解下
    2024-03-03
  • C#遞歸遍歷窗體所有textbox控件并設置textbox事件的方法

    C#遞歸遍歷窗體所有textbox控件并設置textbox事件的方法

    這篇文章主要介紹了C#遞歸遍歷窗體所有textbox控件并設置textbox事件的方法,包括針對textbox控件的遞歸遍歷技巧與事件方法的設置技巧,需要的朋友可以參考下
    2014-12-12
  • C#多線程系列之async和await用法詳解

    C#多線程系列之async和await用法詳解

    本文詳細講解了C#多線程中async和await的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 淺析WPF中控件拖拽與拖動的實現(xiàn)

    淺析WPF中控件拖拽與拖動的實現(xiàn)

    這篇文章主要為大家詳細介紹了如何在WPF中實現(xiàn)控件拖拽與拖動的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • 如何用C#獲取計算機詳細的軟件和硬件信息

    如何用C#獲取計算機詳細的軟件和硬件信息

    我們應該都知道System.Management提供的類可以用于讀取本地計算機設備的各種數(shù)據(jù),下面這篇文章主要給大家介紹了關于如何用C#獲取計算機詳細的軟件和硬件信息的相關資料,需要的朋友可以參考下
    2022-12-12
  • C#實現(xiàn)基于XML配置MenuStrip菜單的方法

    C#實現(xiàn)基于XML配置MenuStrip菜單的方法

    這篇文章主要介紹了C#實現(xiàn)基于XML配置MenuStrip菜單的方法,涉及C#使用XML配置MenuStrip菜單的原理與實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • 詳解C#中的string與String

    詳解C#中的string與String

    本篇文章主要對jC#中的小寫string與大寫String進行詳細介紹,相信對大家學習會有很好的幫助,需要的朋友一起來看下吧
    2016-12-12
  • C#字符串中去除多余的空格保留一個的實例

    C#字符串中去除多余的空格保留一個的實例

    下面小編就為大家分享一篇C#字符串中去除多余的空格保留一個的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • C#中使用Join與GroupJoin將兩個集合進行關聯(lián)與分組

    C#中使用Join與GroupJoin將兩個集合進行關聯(lián)與分組

    這篇文章主要介紹了C#中使用Join與GroupJoin將兩個集合進行關聯(lián)與分組,文中分別對Join和GroupJoin的用法進行詳細說明,需要的朋友可以參考下
    2017-12-12

最新評論