title: 事件系统

事件系统

事件机制是一种很好的应用解耦方式。CatLib事件系统让我们可以订阅和监听程序中出现的各种事件。

应用程序已经默认提供了事件系统,供给全局事件使用。如果您要定义私有范围的事件可以这么做:

  1. var dispatcher = new EventDispatcher();

名词定义

  • 载荷是指程序调用所附带的上下文信息。不同的调用者所提供的上下文信息各不相同。

注册普通监听器

通过 AddListener 命令您可以注册一个事件的监听器。

  1. dispatcher.AddListener("event.name", (EventArgs args) =>
  2. {
  3. //todo
  4. });

触发事件

如果要触发事件,您可以通过Raise来触发事件。这个函数将会把事件分发到它所有已经注册的监听器上。

  1. dispatcher.Raise("event.name", userParams);

判断监听器是否存在

您可以通过HasListener来判断事件监听器是否存在。

  1. dispatcher.HasListener("event.name");

终止事件传递

CatLib事件系统支持实现一个IStoppableEvent接口来决定是否来终止事件的传递。

  1. public class FooEventArgs : EventArgs, IStoppableEvent
  2. {
  3. public bool IsPropagationStopped => true;
  4. }

解除事件监听

您可以通过RemoveListener方法来解除指定的事件监听器。

  1. dispatcher.RemoveListener("event.name", listener);

解除事件下全部监听器

  1. dispatcher.RemoveListener("event.name");