Winform 讓跨執行緒訪問變得更簡單

2021-06-16 12:50:11 字數 1768 閱讀 7074

由於多執行緒可能導致對控制項訪問的不一致,導致出現問題。c#中預設是要執行緒安全的,即在訪問控制項時需要首先判斷是否跨執行緒,如果是跨執行緒的直接訪問,在執行時會丟擲異常。近期在專案中碰到這個問題,首先想到的是,關閉跨執行緒檢查,因為做的winform沒有多麼複雜,圖省事就直接這樣做了,之後又出了一點點問題,還是必需通過委託的方式來實現。

測試示例

網上的資料很多,這裡直接摘抄。

1、關閉跨執行緒檢查。

2、通過委託的方式,在控制項的執行緒上執行。

具體的**如下:

using

system;

using

system.threading;

using

system.windows.forms;

namespace

private

void button1_click(object

sender, eventargs e)

private

void

calnum()

//方法二:檢查是否跨執行緒,然後將方法加入委託,呼叫委託

public

delegate

void settexthandler(int

result);

private

void setcalresult(int

result)

); //

此方法第二引數用於傳入方法,代替形參result

}

else}}

}

在我的winform程式中,子執行緒涉及到對多個控制項的更改,於是封裝了一下,我這裡使用的是拓展方法,只有在.net 3.5上才能支援,如果是.net2.0的環境,需要新增

namespace

system.runtime.compilerservices

}

封裝如下:

using

system.threading;

using

system.windows.forms;

namespace}}

具體的測試如下:

using

system;

using

system.collections.generic;

using

system.componentmodel;

using

system.data;

using

system.drawing;

using

system.text;

using

system.threading;

using

system.windows.forms;

namespace

private

void button1_click(object

sender, eventargs e)

);writemessage(datetime.now.tostring());

});th.isbackground = true

; th.start();

}public

void writemessage(string

msg));}

}}

這樣一行**就可以完成跨執行緒訪問啦。

Winform 讓跨執行緒訪問變得更簡單

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!由於多執行緒可能導致對控制項訪問的不一致,導致出現問題。c 中預設是要執行緒安全的,即在訪問控制項時需要首先判斷是否跨執行緒,如果是跨執行緒的直接訪問,在執行時會丟擲異常。近期在專案中碰到這個問題,首先想到的是,關閉跨執行緒檢查,因為做的winfo...

winform跨執行緒

在winform中經常用到多執行緒,那麼用多執行緒對控制項進行賦值和修改的時候呢會出現類似 該控制項不是當前執行緒建立 的錯誤資訊,在winform中兩種辦法 1.在載入事件中寫這句話,其作用呢就是執行緒的非同步呼叫 1 system.windows.forms.control.checkforil...

C 跨執行緒訪問winform控制項的方法

方法一 system.windows.forms.control.checkforillegalcrossthreadcalls false 不推薦使用這種方式,禁止編譯器對跨執行緒訪問做檢查的方式實現。方法二 使用delegate和invoke private delegate void upda...