.net - 记录事件的调用顺序

标签 .net event-handling

调用特定事件的处理程序的顺序取决于该特定事件的实现。例如,使用多案例委托(delegate)的默认后备存储,将按照它们注册的顺序调用处理程序。但是类设计者/实现者可能使用了 addremove关键字来为事件访问器提供不同的后备存储,因此调用顺序也会不同。

.NET 框架基础库本身是否存在事件文档精确描述其调用顺序的情况?无论是否存在,依赖这种记录在案的订单是否被认为是可接受的做法(例如,对于我自己实现和记录的事件)?为什么或者为什么不?

最佳答案

从来没听说过。这几乎总是以先进先出的方式结束,因为不使用列表并不是很有效。 MulticastDelegate 和 EventHandlerList 就是这样工作的。

依赖秩序是有风险的。在很多情况下,程序员取消订阅事件以防止重入问题,在方法退出时再次订阅它。由于顺序会发生变化,这是不可避免的副作用,他的事件处理程序现在将被最后调用。如果这导致程序失败,那么那个程序员将​​会困惑很长一段时间。他只是看不到代码更改和错误行为之间的联系,这是一个很难修复的错误。尽管如此,让代码以意想不到的方式交互永远是一个陷阱,只有好的设计才能避免它,只有好的调试器才能诊断它。

关于.net - 记录事件的调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17659253/

相关文章:

c# - .NET 的 react 性扩展 (Rx) : Take action once all events are completed

c# - 使用进程间同步对象同步 2 个进程 - Mutex 或 AutoResetEvent

java - gui 帮助...使用 actionListener

asp.net - 如何在asp.net代码后面的html标签中添加事件处理程序?

javascript - 按钮 onClick 事件处理程序永远不会在 Chrome 中触发

c# - 如何将事件传递给方法?

.net - 比较项目值的问题

c# - 关于高分辨率性能计数器的解释及其与 .NET 秒表相关的存在?

c# - 如何从服务器优雅地关闭套接字

c# - TextUpdate 和 TextChanged 事件有什么区别?