首页 新闻 会员 周边

.net的事件和线程问题

0
悬赏园豆:10 [已解决问题] 解决于 2010-10-20 19:39

1。直接调用方法,使用委托,使用事件,它们有什么不同?尤其是委托和事件,感觉使用时差不多啊。
2。跨线程使用事件(委托)它们的执行机制有什么不同吗?一般是怎么执行的?和在同一线程有什么不同?
低级问题请不要鄙视,赐教下啊。

代码苦行僧的主页 代码苦行僧 | 菜鸟二级 | 园豆:311
提问于:2010-10-07 15:30
< >
分享
最佳答案
0

我回答你的第一个问题:委托相当于C语言中的函数指针。举个例子吧:我们之所以能在.aspx页中用<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />这段代码去指定:单击这个按钮时,去执行.cs中的Button1_Click中的代码。就是因为.NET已在定义Button时创建了一个委托,该委托指向的是返回void,参数列表为(object sender, EventArgs e)形式的函数或方法,并且为我们隐藏了类似这样代码Button1.Click+=EventHandler(Button1_Click),Button1.后的Click就是在Button类中定义的事件,EventHandler是Button类中定义的委托,这样委托就将事件和事件处理函数联系起来了。

综上所述,委托和事件的所用是完全不同的,用法上也没有什么相似的地方。建议你去系统的学习下这方面的知识。

第2个问题,我不太明白你要表达的意思。

收获园豆:5
JeffLiang | 初学一级 |园豆:43 | 2010-10-07 18:05
第2个问题:比如我在一个窗体里面注册一个事件并应用,但是激发事件的方法却在另外一个线程里面。
代码苦行僧 | 园豆:311 (菜鸟二级) | 2010-10-07 22:28
其他回答(2)
0

第二个问题跨线程我不太懂,谈谈第一个问题吧:

委托与方法差不多,它们都是直接调用过程,事件是异步调用过程。

委托好比中介,调用方法可以私有,调用者不必知道调用方法,通过委托来调用该方法,一般用于调用者不知道方法名,方法是动态指定的情况。

事件是异步过程,采用订阅发布原理,事件好比一个列表,如果有订阅者,就将其加入列表中,发布时检查列表有没有订阅者,如果有则触发。

收获园豆:5
小闵 | 园豆:502 (小虾三级) | 2010-10-07 22:33
0

事件可以说就是委托链

X教授 | 园豆:240 (菜鸟二级) | 2010-10-08 09:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册