C WinForm跨執行緒修改UI介面

2022-01-26 04:35:20 字數 1162 閱讀 8482

在我做winform開發的過程中,經常會遇到耗時操作或阻塞操作。他們會引發軟體的卡頓甚至假死,嚴重影響軟體的使用。因此,這類耗時或阻塞的操作一般都會使用非同步的方式去執行,不影響主線程(ui執行緒)與使用者間的互動。但多個執行緒競爭讀寫同乙個資源往往會造成意想不到的意外結果,ui介面也是一種資源,所以跨執行緒修改ui介面往往被加以限制。而在winform中,跨執行緒修改ui介面同樣是不被允許的。在子執行緒中修改介面控制項時visual studio會報出如下錯誤:

.net提供了很多跨執行緒修改ui的方法,每種方法也有與之對應的工具類。我最常用的方法是threadpool+ delegate的方式完成跨執行緒對ui對的修改。

1、定義委託,把內容寫在控制項裡面

private

delegate

void setlabeldelegate(string

value);

private

delegate

void setlabeldelegate2(string

value);

private

void settext(string

value));}

else

}

2、定義方法,執行緒呼叫

private

void button3_click(object

sender, eventargs e)

private

void dao(object

url)

3、更新ui控制項 

settext("

\r\n

" + "

start

");

1、使用delegate實現跨執行緒更新ui;

2、使用threadpool實現多執行緒執行方法,避免卡頓;

跨執行緒修改UI控制項

1.直接修改,失敗引發異常.namespace test private void setlabeltext private void btnvisitlabel click object sender,eventargs e 2.使用 呼叫ui控制項的invoke方法修改,成功.namespace...

Qthread執行緒修改UI

from pyqt5.qtcore import from pyqt5.qtgui import from pyqt5.qtwidgets import import time 訊號傳參型別 pyqtsignal 無引數訊號 pyqtsignal int 乙個引數 整數 的訊號 pyqtsignal...

C winform中UI執行緒與工作執行緒的互動

c winform中ui執行緒與工作執行緒的互動 1.使用多執行緒 void calcpi int digits void calcbutton click object sender,eventargs e void calcpithreadstart object digits 2.在ui執行緒...