今天在論壇上面看到乙個lz的關於c#的問題,執行出現錯誤。上網搜了答案,又看看自己的積累,本質的原因是:c#的跨執行緒呼叫控制項的問題。經過一番查詢,同時根據自己的資料,現總結如下:
1、系統自帶委託(不帶引數的控制項呼叫)
//2、自定義委託呼叫methodinvoker 型別是乙個系統定義的委託,用於呼叫不帶引數的方法。
private
thread thread;
private
void button1_click(object
sender, eventargs e)
private
void
runthread()
private
void
setlabeltext()
第一種情況:帶引數
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;3、以上就是跨執行緒對控制項的呼叫,以下是本人在日常中用到的乙個方法,不知道是不是對本標題的進一步解釋,但感覺很有用就和大家分享下。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++)
}
大致意思是在其它class類中往form1中richtexbox中新增內容,意思和本標題有所接近吧,廢話少說,**如下:
view code
private在form2中呼叫form1中的函式: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)
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...