【问题标题】:Why is only one of my event handlers fired?为什么我的事件处理程序中只有一个被触发?
【发布时间】:2019-03-04 18:50:22
【问题描述】:

我想同时录制来自两个网络摄像头的视频。我正在使用 Aforge.Video.DirectShow 包从网络摄像头捕获每一帧。 我从他们网站上显示的示例开始,然后添加了第二个摄像头。

但我遇到的问题是只有一个用于处理新帧的事件处理程序被触发。在下面的示例代码中,它是_NewFrameHandler2。

我觉得我在这里遗漏了一些明显的东西......

public class Camera
{
    private VideoCaptureDevice objCamera1;
    private VideoCaptureDevice objCamera2;

    public void Start()
    {
        FilterInfoCollection objVideoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
        objCamera1 = new VideoCaptureDevice(objVideoDevices[0].MonikerString);
        objCamera2 = new VideoCaptureDevice(objVideoDevices[1].MonikerString);

        objCamera1.VideoResolution = objCamera1.VideoCapabilities[objCamera1.VideoCapabilities.Count() - 1];
        objCamera2.VideoResolution = objCamera2.VideoCapabilities[objCamera2.VideoCapabilities.Count() - 1];


        objCamera1.NewFrame += new NewFrameEventHandler(_NewFrameHandler1);
        objCamera2.NewFrame += new NewFrameEventHandler(_NewFrameHandler2);

        objCamera1.Start();
        objCamera2.Start();   
    }

    public void Stop()
    {
        objCamera1.Stop();
        objCamera2.Stop();
    }


    private void _NewFrameHandler1(object sender, NewFrameEventArgs eventArgs)
    {

        Bitmap objFrame = (Bitmap)eventArgs.Frame;
        Console.WriteLine("1");
    }

    private void _NewFrameHandler2(object sender, NewFrameEventArgs eventArgs)
    {

        Bitmap objFrame = (Bitmap)eventArgs.Frame;
        Console.WriteLine("2");
    }
}

【问题讨论】:

  • 您可能想研究 TPL / 多任务处理。这可能是线程问题。
  • 感谢@Kixoka 的反馈,我进行了更多实验,发现 objCamerax.Start() 函数决定了正在执行的事件处理程序。最后一个启动的是实际运行的。所以这似乎是 Aforge 包的问题。我查看了 Start() 函数,他们在那里所做的只是启动一个新线程,然后从相机读取帧。
  • 仅供参考,AForge 不再维护,并已被纳入 Accord 项目。它基本上是一个替代品(当然命名空间发生了变化)。
  • 感谢 Amy 的输入,我已将其迁移到 Accord!

标签: c# aforge


【解决方案1】:

我想我已经明白了。 我在调用相机对象上的 .Start() 函数之间添加了 500 毫秒的延迟。

System.Threading.Thread.Sleep(500);

现在可以了。

【讨论】:

  • 您可以接受自己的答案来关闭它。好吧,实际上它并没有真正关闭,但人们看到它已经得到了回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多