做自己的自定义.NET事件处理循环

Ben*_*oit 0 .net c# dispatchertimer

几年前,我读了一本书,描述了如何使用自己的处理器覆盖.NET中的默认事件"调度程序"实现.

    class foo {
       public event EventHandler myEvent;
       ...
    }

    ...
      myFoo.myEvent += myBar1.EventHandler;
      myFoo.myEvent += myBar2.EventHandler;
Run Code Online (Sandbox Code Playgroud)

每当事件触发时,都会调用myBar1和myBar2处理程序.

我记得,这个循环的默认实现使用链表,只是迭代列表并按顺序调用EventHandler委托.

我的问题有两个:

  1. 有人知道我正在读哪本书吗?
  2. 为什么要覆盖默认实现(可能会在本书中回答)?

编辑:我所指的那本书确实是Jeffrey Richter通过C#的CLR

Jon*_*eet 8

它可能是许多书籍或网络文章之一.

您可能想要更改订阅/取消订阅事件的方式有多种原因:

  • 如果您有许多事件,其中许多可能无法订阅,您可能希望使用EventHandlerList来降低内存使用量
  • 您可能希望记录订阅/取消订阅
  • 您可能希望使用弱引用来避免订户的生命周期与您的生命相关联
  • 您可能希望更改与订阅/取消订阅关联的锁定

我相信还有更多 - 这些都不在我的脑海里:)

编辑:另请注意,使用自定义方式处理订阅/取消订阅和使用自定义方式引发事件(可以调用GetInvocationList并保证所有处理程序都被调用,例如,无论例外情况)之间存在差异.