为什么只有我的一个事件处理程序被解雇了?
Why is only one of my event handlers fired?
我想同时录制来自两个网络摄像头的视频。我正在使用 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");
}
}
我想我已经弄明白了。
我在调用相机对象上的 .Start() 函数之间添加了 500 毫秒的延迟。
System.Threading.Thread.Sleep(500);
现在可以了。
我想同时录制来自两个网络摄像头的视频。我正在使用 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");
}
}
我想我已经弄明白了。 我在调用相机对象上的 .Start() 函数之间添加了 500 毫秒的延迟。
System.Threading.Thread.Sleep(500);
现在可以了。