为什么只有我的一个事件处理程序被解雇?

问题描述 投票:1回答:1

我想同时录制来自两个网络摄像头的视频。我正在使用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");
    }
}
c# aforge
1个回答
1
投票

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

System.Threading.Thread.Sleep(500);

现在它有效。

© www.soinside.com 2019 - 2024. All rights reserved.