摘要:
当一个事件被触发时,订阅该事件的方法将在触发该事件的线程中执行。也就是说,订阅该事件的方法在触发事件的线程中同步执行。由此,存在一个问题:如果订阅事件的方法执行时间很长,触发事件的线程被阻塞,长时间等待方法执行完毕。这样,不仅影响后续订阅事件方法的执行,也影响主线程及时响应用户的其他请求。如何处理这个问题呢?讲到此,我想您已经想到了,那就是异步事件调用。 怎样实现异步事件调用呢?如果您对事件比较了解的话,您应该知道事件的本质其实是一种MulticastDelegate(多播委托)。MulticastDelegate类提供了一个GetInvocationList方法,该方法返回此多播委托的委.. 阅读全文
摘要:
转http://blog.csdn.net/richerg85/article/details/7659180在研究c# 线程之间通信时,发现传统的方法大概有三种①全局变量,由于同一进程下的多个进程之间共享数据空间,所以使用全局变量是最简单的方法,但要记住使用volatile进行限制。②线程之间发送消息(这个随后文章中会讨论到)。③CEvent为MFC中的一个对象,可以通过对CEvent的触发状态进行改变,从而实现线程间的通信和同步,这个主要是实现线程直接同步的一种方法。本文介绍的一种方法是这三种之外的一种方法,本文中实例是通过创建一个线程类,通过委托事件把值传送到Form所在的类中,同时更新 阅读全文
摘要:
转http://www.cppblog.com/baby-fly/archive/2010/04/01/111245.html在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate,至于委托的本质请参考我的另一随笔:对.net事件的看法。一、为什么Control类提供了Invoke和BeginInvoke机制?关于这个问题的最主要的原因已经是dotnet程序员众所周知的,我在此费点笔墨再次记录到自己的日志,以便日后提醒一下自己。1、windows程序消息机制Windows GUI程序是基于消息机制的,有个主线程维护着一个消息泵。这个消息泵让windows程序生生不 阅读全文