我有一个相机处理程序类,每次接收到帧数据时,它都会调用一个事件,如下所示:
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实例化,它们将无法工作。
实现此功能的最简洁,最“规范”的方法是什么?
答案 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)