c 跨執行緒呼叫控制項 函式的問題

2022-02-11 11:43:47 字數 1971 閱讀 1395

今天在論壇上面看到乙個lz的關於c#的問題,執行出現錯誤。上網搜了答案,又看看自己的積累,本質的原因是:c#的跨執行緒呼叫控制項的問題。經過一番查詢,同時根據自己的資料,現總結如下:

1、系統自帶委託(不帶引數的控制項呼叫)

//

methodinvoker 型別是乙個系統定義的委託,用於呼叫不帶引數的方法。

private

thread thread;

private

void button1_click(object

sender, eventargs e)

private

void

runthread()

private

void

setlabeltext()

2、自定義委託呼叫

第一種情況:帶引數

private

thread thread;

private

delegate

void setlabeltext(string

str);

private

void button1_click(object

sender, eventargs e)

private

void

runthread());}

else

this.label1.text = "呼叫"

; }

private

void setlabel(string

s)

第二種情況:不帶引數

view code

thread th1, th2;

double

x1, x2;

public

delegate

void

setcontrol();

private

void button1_click(object

sender, eventargs e)

private

void

fangfa1()

for (int i = 0; i < 50; i++)

} private

void

fangfa2()

for (int i = 0; i < 50; i++)

}

3、以上就是跨執行緒對控制項的呼叫,以下是本人在日常中用到的乙個方法,不知道是不是對本標題的進一步解釋,但感覺很有用就和大家分享下。

大致意思是在其它class類中往form1中richtexbox中新增內容,意思和本標題有所接近吧,廢話少說,**如下:

view code

private

delegate

void setrichtexbox(string

str);

private

void button1_click(object

sender, eventargs e)

public

void settext(string

s) );

}else

this

}private

void set(string

txt)

在form2中呼叫form1中的函式:

view code

//

以下**是在form2中

public

form1 myform1;

public

delegate

void addmsg(string

txt);

public

void msg(string

txt)

public

void diaoyong(string

str));}

C 跨執行緒呼叫控制項

在c 應用程式開發中,我們經常需要把ui執行緒和工作執行緒分開程式設計,為了防止介面停止響應。同時,我們也需要在工作執行緒中去更新ui介面的控制項,在clr的執行緒安全中並不允許我們直接在工作執行緒操作ui介面。因此,介紹以下三種方式進行跨執行緒操作ui。private void button2 c...

C 跨執行緒呼叫控制項

在c 的應用程式開發中,我們經常要把ui執行緒和工作執行緒分開,防止介面停止響應。同時我們又需要在工作執行緒中更新ui介面上的控制項,下面介紹幾種常用的方法 閱讀目錄 執行緒間操作無效 第一種辦法 禁止編譯器對跨執行緒訪問做檢查 第二種辦法 使用delegate和invoke來從其他執行緒中呼叫控制...

C 跨執行緒呼叫窗體控制項的問題

前段時間遇到跨執行緒呼叫窗體控制項的問題,其實一句話system.windows.forms.control.checkforillegalcrossthreadcalls false 就可以解決,但感覺會有不穩定因素,因此在網上找了一些相應的文章感覺還不錯,第一種用的比較順手 注 在devexpr...