许多不同的类对象监听单个事件C#

时间:2018-10-25 19:26:53

标签: c# events

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

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实例化,它们将无法工作。

实现此功能的最简洁,最“规范”的方法是什么?

3 个答案:

答案 0 :(得分:1)

您所做的一切都很好。如果仅访问一台摄像机,则只需一个CameraHandler对象即可创建多个事件处理程序。

但是,如果您可以同时访问多台摄像机,则需要有一个cameraHandler列表,例如List<CameraHandler> cameras,以便您可以从特定相机获取所需的数据。如果您正在使用IMU信息,则应该注意同步。

答案 1 :(得分:0)

您可以通过custom event accessors挂钩任意数量的监听器。

    public class Eval 
{
     boolean binaryOp = false;
    public boolean isOperator(String n)
    {
        switch(n)
        {
        case "(":
            return true;
        case ")":
            return true;
        case "*":
            ;
        case "/":
            ;
        case "+":
            binaryOp = true;
            return true;
        case "-":
                    If (binaryOp) break;
        case "#":
            return true;
        }
        binaryOp = false;
        return false;
     }
     public int Priority(String op)
    {
        switch(op)
        {
        case "(":
            return 3;
        case "*":
            return 2;
        case "/":
            return 2;
        case "+":
            return 1;
        case "-":
            return 1;

        }
        return 0;
    }

}

答案 2 :(得分:0)