首页 > 解决方案 > 许多不同的类对象监听一个事件c#

问题描述

我有一个相机处理程序类,每次它接收到帧数据时,它都会调用一个事件,如下所示:

public delegate void FrameAcquiredCallback(byte[] frameData);

public void OnFrameArrived(MediaFrameReader sender, MediaFrameArrivedEventArgs args) {
     FrameAcquired.Invoke(buffer); // buffer is a byte[] that I set up previously.
}

一旦一个类对象想要访问它byte[] frameData,它所要做的就是订阅该事件,如下所示:

public class Start1
{
     public CameraHandler camera;
     public void Start()
     {
        camera = new CameraHandler();
        camera.FrameAcquired += eventTest1;
     }
     public static void eventTest1(byte[] frameData)
     {
        Console.WriteLine("Received1");
     }
}

现在我想做的不仅仅是一个类,而是多个不同的类对象,以便能够订阅同一个事件并访问byte[] frameData.

当我创建一个新类并类似地订阅时,我现在有两个 CameraHandlers 实例,这将不起作用。

实现此功能的最干净和“规范”的方式是什么?

标签: c#events

解决方案


您可以通过自定义事件访问器挂钩任意数量的侦听器。

public class Start1
{
  public EventHandler FrameAcquired
  {
    add 
    {
      this.camera.FrameAcquired += value;
    }
    remove
    {
      this.camera.FrameAcquired -= value;
    }
}

推荐阅读