当前位置:编程学习 > C#/ASP.NET >>

关于委托和方法以及CallBack、线程的一些问题

Thread th=new Thread(ThreadStart start)
1:start是一个委托实例
既然是一个委托实例,那我一般的做法就是创建一个委托实例绑定方法
public void Foo()
{
    \\处理的代码
}
//创建委托实例
ThreadStart ts=new ThreadStart(Foo)
//传递委托实例
Thread th=new Thread(ts);

问题1:
我看到网上还有一种写法
ThreadStart ts=new ThreadStart(Foo) //直接把方法传进去了
比较 ThreadStart ts=new ThreadStart(ts) //传的是委托实例
这一点不是很明白:既然是要放委托实例,为什么能直接把方法名放进去?
还有莫非方法是委托的子类? 这种情况我只有在多太中会看到
请求各位大大给我一个详细的好理解的解释 

问题2:
关于自定义事件和基于WinFrom的事件驱动机制
同样是事件、在WinForm中 为什么事件直接注册后 直接能触发,而我自定义的事件要注册之后还要手动触发呢?不是很明白,求一个详细的解释

问题3:
关于CallBack回调函数
我还见过网上有一种写法
AsyncCallBack ac=new AsyncCallBack(绑定方法)

某对象.EndInvoke(ac,第二个参数应该是状态){ \\执行代码};具体忘了
反正按照网上的说法是将这个ac放进去之后会先回调然后在走EndInvoke
这里我就不是很明白:ac没有触发就放进去了,难道ac作为参数会自动触发?还是他的一个机制?
请帮忙看看一个新手的疑惑,高分悬赏








--------------------编程问答-------------------- (1)
等价的,这是语法魔术
(2)
看你怎么理解自动、手动。如果你看WinForms源代码,你会发现也是手动触发的。如果把你的程序封装成类库,并且对它的源代码视而不见,那么它也是自动的。
(3)
这是异步调用,也就是你调用了这个方法,不等执行,就执行后面的代码,执行完了,它会调用callback,这个异步调用是在Control.BeginInvoke/EndInvoke实现的,包括把参数传进去。

--------------------编程问答-------------------- 1.语法糖,效果一样。编译器会帮你转成委托。
2.只是基类封装了而已,你没看到不代表代码没写。
3.你看的是BeginInvoke吧。 --------------------编程问答-------------------- 除
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,