我正在创建wpf应用程序并使用我的USB网络摄像头捕获图像。我使用的图书馆是Aforge。一切都很好,我的意思是我从网络摄像头获得直播,我能够捕捉图像等。 但问题是当我关闭程序相机仍在运行时(黄色LED显示)并且程序没有结束。我怎么能让相机停下来?
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
if (WebCam != null)
if (WebCam.IsRunning)
{
WebCam.SignalToStop();
WebCam.WaitForStop();
WebCam = null;
}
}
这就是我使用NewFreameEventArgs
获取流
public void Cam_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
try
{
System.Drawing.Image img = (Bitmap)eventArgs.Frame.Clone();
MemoryStream ms = new MemoryStream();
img.Save(ms, ImageFormat.Jpeg);
ms.Seek(0, SeekOrigin.Begin);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
bi.Freeze();
Dispatcher.BeginInvoke(new ThreadStart(delegate
{
previewWindow.Source = bi;
mainCameraImageControl.Source = bi;
}));
}
catch (Exception ex)
{
}
}
答案 0 :(得分:1)
我建议您检查一下您是否注册了任何网络摄像头事件。如果是,请取消订阅。
WebCam.NewFrame -= new NewFrameEventHandler(WebCam_NewFrameReceived);
修改:回复您的评论和已修改的问题
WebCam.NewFrame -= new NewFrameEventHandler(WebCam_NewFrameReceived);
Dispatcher.CurrentDispatcher.InvokeShutdown();
WebCam.SignalToStop();
WebCam.WaitForStop();
首先,取消订阅活动。然后拨打InvokeShutdown()
。以下是来自Microsoft link:
在事件队列展开之前,Dispatcher不会完全关闭。
这样,事件和调度程序与实例断开连接。然后你发信号通知凸轮停下来等待停止。
答案 1 :(得分:0)
您发信号通知网络摄像头停止,但实际上并没有等待它停止。
您的Webcam
对象应该采用WaitToStop()
方法,您也应该在SignalToStop()
后调用。
另请查看this aforge.net thread以获取更多信息。