我提出活动时.NET虚拟机会做什么?

时间:2013-09-20 08:00:15

标签: .net events virtual-machine

在.NET中举办活动时究竟/技术上/发生了什么? 我无法通过Google自己回答这个问题。

我的意思是:事件被提出并突然被调用了一些处理程序,我的意思是什么在两者之间幸福?事件是否以某种方式存储在不可见的事件堆栈中?他们在某个地方排队吗?我可以筹集多少个活动?等

我希望有人可以了解.NET虚拟机如何处理事件。

1 个答案:

答案 0 :(得分:4)

常规.NET事件 通常 只是委托调用,这与常规方法调用没有太大区别。唯一微妙的区别是因为委托是多播的,所以它必须展开所有订阅者的完整调用列表,并依次调用它们。这一切都发生在委托.Invoke()期间。所以不,没有特殊的事件堆栈/队列。

然而! UI技术(winforms,WPF等)上的一些东西使用Windows消息循环 - 所以在这些情况下,是的,有一个逻辑队列。

每个委托订阅(即foo.SomeEvent += this.SomeHandler)涉及两件事:目标实例(this)和目标方法(SomeHandler)。调用时,委托只是针对指定的目标调用该方法。有点神奇,但 与常规方法调用不同。