.net 在摄像机之间切换,在VideoSourcePlayer.Start()上保持不变

.net 在摄像机之间切换,在VideoSourcePlayer.Start()上保持不变,.net,video,emgucv,aforge,.net,Video,Emgucv,Aforge,我有一个带有两个摄像头的系统。我有两个VideoSource对象,其中一个显示在VideoSourcePlayer控件中。我想使用以下代码在它们之间切换: videoSourcePlayer.SignalToStop videoSourcePlayer.WaitForStop(); if (videoSourcePlayer.VideoSource == videoSource1) { videoSourcePlayer.VideoSource = videoSource2; } el

我有一个带有两个摄像头的系统。我有两个VideoSource对象,其中一个显示在VideoSourcePlayer控件中。我想使用以下代码在它们之间切换:

videoSourcePlayer.SignalToStop
videoSourcePlayer.WaitForStop();
if (videoSourcePlayer.VideoSource == videoSource1)
{
     videoSourcePlayer.VideoSource = videoSource2;
}
else
{
     videoSourcePlayer.VideoSource = videoSource1;
}
videoSourcePlayer.Start();
当我第一次按下切换按钮时,我在videoSourcePlayer控件中看到“正在连接…”消息。当我调用videoSourcePlayer.Stop()时没有发生这种情况,它只是抛出了一个异常,然后继续。再次切换后,问题消失。换句话说,我可以在两个摄像头之间切换,没有任何问题。 谁能解释一下,告诉我如何避免这个问题

澄清

我初始化videoSource对象和播放器,如下所示:

videoSource1 = new VideoCaptureDevice(videoDevices[iiiVideoIndex].MonikerString);
...
videoSource1.NewFrame += iiiFrameHandler.SaveFrame;
videoSourcePlayer.VideoSource = videoSource1;
videoSourcePlayer.NewFrame += PlayerNewFrame;
...
videoSource1.Start();
...
System.Threading.Thread.Sleep(500);
videoSource2 = new VideoCaptureDevice(videoDevices[jjjVideoIndex].MonikerString);
...
videoSource2.NewFrame += jjjFrameHandler.SaveFrame;
videoSource2.Start();

我有三个新的FrameHandler,因为我想通过用户界面做一些事情,在某种状态下,我想为每个摄像头的每一帧做一些事情。

这通常是可行的。问题是两个摄像头都是通过外部USB集线器连接的。该软件可以识别两个摄像头,但一次只能连接一个摄像头

将其中一个连接到它自己的USB端口使问题得以解决