繁体   English   中英

引发事件时.NET虚拟机会做什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM