-. winform多執行緒程式設計
1. new thread()
新開乙個執行緒,執行乙個方法,沒有引數傳遞:
private
void
dowork()
private
void
dosomething()
新開乙個執行緒,執行乙個方法,並傳遞引數:
private void dowork()
private void dosomething(object o)
引數定義為object型別。
2. threadpool
眾所周知,新開乙個執行緒代價是很高昂的,如果我們每個操作都新開乙個執行緒,那麼太浪費了,於是,下面使用執行緒池。
無引數傳遞:
private void
dowork()
private
void
dosomething(
object
o) 有引數傳遞:
private void
dowork()
private
void
dosomething(
object
o)
使用匿名方法更靈活:
private void
dowork()
));}
在匿名**段裡面可以直接訪問區域性變數,不用在關心引數傳遞的問題
2.invoke方法簽名:
object control.invoke(delegate method)
object control.invoke(delegate method, params object args)
3.使用自定義委託
private void
dowork()
private
delegate
void
myinvokedelegate(
string
name);
private void
dosomething(
object
o) private
void
changetext(
string
name)
4.使用system.action:
private void
dowork()
private
void
dosomething(
object
o) private
void
changetext(
string
name)
本例傳遞乙個引數,system.action有很多個過載,可以無引數(非泛型),而最多可以有四個引數,同樣採用匿名方法,不使用泛型形式的system.action,如下:
private void
dowork()
private
void
dosomething(
object
o) ));}
5.使用system.func
如果invoke呼叫主窗體操作之後,還希望在呼叫完得到乙個返回值:
private void
dowork()
private
void
dosomething(
object
o) private
intgetid(
string
name)
else
}result的值為 999。
system.func同樣有很多泛形過載,這裡不贅述。
6.關於invoke的擁有者:control
本文例中都是用this來引用,這裡this替換為窗體任何乙個控制項的控制代碼都是ok的,因為control.invoke含義是將方法委託給擁有該control的執行緒去執行。
winform 多執行緒錯誤集錦
1.thread.sleep 300 到底睡的是誰,哪個執行緒?1 public void setlabelinfo object num 2 7 8else920 21 累加顯示到label 中,第一次確實是btn發起的執行緒,name start clic 程,第二次顯示的主線程,所以threa...
WinForm多執行緒程式設計簡單Demo
ps 由於報告生成非常耗費資源,使用單執行緒程式設計模式,監控資訊根本無法資訊無法及時在richtext顯示.public partial class form1 form private void createrpt cancellationtoken ct invoke方法用於獲得建立lbl s...
C 的WinForm多執行緒應用
vs2005環境下,新建乙個window窗體 命名多執行緒應用 完整 using system using system.collections.generic using system.componentmodel using system.data using system.drawing us...