[英]What does the .NET Virtual Machine do when I raise an event?
在.NET中引发事件时,/技术/到底发生了什么? 我自己无法通过Google回答这个问题。
我的意思不是:事件引发了,突然有一个处理程序被调用,我的意思是这之间发生了什么? 事件是否以某种方式存储在不可见的事件堆栈中? 他们在某个地方排队吗? 我可以发起多少个活动? 等等
我希望有人可以阐明.NET虚拟机如何处理事件。
常规.NET事件通常只是委托调用,与常规方法调用没有太大区别。 唯一的细微差别是,由于委托是多播的,因此必须展开所有订户的完整调用列表,然后依次调用它们。 这一切都发生在委托.Invoke()
。 因此,没有特殊事件堆栈/队列。
然而! UI技术上的某些内容(winforms,WPF等) 确实使用Windows消息循环-因此, 在那种情况下 ,确实存在逻辑队列。
每个委托订阅(即foo.SomeEvent += this.SomeHandler
)都涉及两件事:目标实例( this
)和目标方法( SomeHandler
)。 调用时,委托仅针对指定目标调用该方法。 略魔术,但没有什么不同常规方法调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.