C#委托 多线程学习

想把方法当成方法的参数进行传递,方法不能作为方法的参数,所以就有了委托。

委托的语法:

1、声明委托类型:Delegate int DelMath(int a,int b)

委托和类在同一层级。

2、定义委托对象,让委托指向方法

DelMath del=new DelMath(Add);

省略写法: DelMath del=Add;

再省:直接将Add写进方法中去。

Static int Add(int a,int b){

Return a+b;

}

3、调用委托

Int n=del(1,2);

委托调用2:

Int n=Test(1,2,del);

Static int Test(int n1,int n2, Delegate del){

Return del(n1,n2);

}

 

匿名方法:仅用一次,返回值直接给委托。

DelMath del=delegate(string str){console.writeline(str)};

 

求最大值,两个示例。

 

多播委托:委托可以指向多个或一个方法。

Del=add;

委托可以添加:Del+=Minus;

委托也可以移除:del-=Minus;

多播委托按顺序执行各个方法,如有返回值会指向最后一个方法的返回值。

所以,经常使用多播委托,一般都返回为void。

 

委托实质是一个类。

delMath del=add;

int a=del(1,2);等价于int a=del.Invoke(1,2);

多播委托就是一个委托数组,依次调用。

 

窗体间传值:

原方法:在初始化时,对窗体2的构造方法,建立一个参数进行传值。

当窗体2 给窗体1传值时,不能用new构造,怎么办?

 

 

 

 

总结:窗体传值,你要给主窗体写参数,但是你主窗体没参数,你就需要通过传递一个方法去次窗体,让次窗体不断的给主窗体赋值。

要定义委托:delegatevoid DelShowMsg(string msg);

 

多线程:

1、  ThreadStart给线程传递的方法属于委托,要求该方法无参数,无返回值!!!

2、  ParameterizedThreadStart也属于委托,无返回值,有参数,但参数必须为object类型。

报错:线程间操作无效。原因:至少有两个线程。

在确保正确的前提下,可以使用control.checkxxxxxxxxxxxxxxxxxcalls=false;不检查跨线程操作合法性。

 

解决方案:设置全局变量线程名,在窗体关闭时,使用全局变量,关闭次线程。

 

线程同步:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值