子執行緒訪問主線程式控制件時,會報出錯。
兩種方法可以實現第一種是,設定執行緒的檢查方式為無。
第二種是使用委託。第一種沒什麼好講的,這裡主要講下第二種。
1,首先是委託
delegate
(1)委託的定義:將方法作為方法的引數
(2)定義委託:
delegatevoid dele(int a, int b);
委託是一種資料型別,就像 int , float,student 學生類一樣
(3)宣告委託變數
dele del1=null;
(4)給委託變數賦值
del=newdele(add);
static
void add(int a, int
b) ", a +b);
}
(5)呼叫委託
del(2, 3);
全部**:
usingsystem;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
委託 weituo(
3, 4
, del);
console.readline();
}static
void weituo(int a,int
b,dele del)
static
void add(int a, int
b) ", a +b);
}static
void sub(int a, int
b) ",a-b);
}static
void mul(int a, int
b) ", a*b);
}static
void div(int a,int
b)
", a/b);}}
}
2 跨執行緒呼叫委託
(1)定義類
publicclass
messagecreate
(2)類中定義委託,定義委託變數,呼叫委託
publicclass
messagecreate
//呼叫委託
public
void show(listbox lb, string
strmsg));
}}
(3)而給委託變數賦值時要在主線程裡面賦值,那麼這樣乙個非同步呼叫委託就完成了。
//新建乙個類
messagecreate mc = new
messagecreate();
//給類中的委託變數賦值
mc.my = new
messagecreate.mydelegate(showstatus);
//呼叫委託
mc.show()
------------------委託函式--------------------------
public
void showstatus(listbox lb, string
strmsg)
}
大功告成!
C 委託非同步呼叫
廢話不多說,直接上 ps 我就喜歡簡單 直接 粗暴 using system using system.collections.generic using system.linq using system.runtime.remoting.messaging using system.text us...
執行緒 委託的非同步呼叫
c programming p323 begininvoke 會立即返回,它將建立乙個另乙個執行緒來完成自己的工作。當我需要它執行後的結果時 例如 pubilc delegate in testdetegate pubilc testdetegate thedetegate thedetegate ...
C 委託的非同步呼叫
本文將主要通過 同步呼叫 非同步呼叫 非同步 三個示例來講解在用委託執行同乙個 加法類 的時候的的區別和利弊。首先,通過 定義乙個委託和下面三個示例將要呼叫的方法 新增的命名空間 using system.threading using system.runtime.remoting.messagi...