在下面的代码中
videoCaptureDevice
停不下来:
videoCaptureDevice = new VideoCaptureDevice(filterInfoCollection[cboCamera.SelectedIndex].MonikerString);
videoCaptureDevice.NewFrame += VideoCaptureDevice_NewFrame;
videoCaptureDevice.Start();
videoCaptureDevice.Stop();
VideoCaptureDevice_NewFrame
代码如下:
private void VideoCaptureDevice_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
try
{
if (pic.InvokeRequired)
{
pic.Invoke(new MethodInvoker(() =>
{
pic.Image = (Bitmap)eventArgs.Frame.Clone();
}));
}
else
{
pic.Image = (Bitmap)eventArgs.Frame.Clone();
}
}
catch (Exception ex)
{
}
}
例外的是
System.PlatformNotSupportedException:“此平台不支持线程中止。”
我正在使用 .NET 8 和 Windows 窗体。
如文档中所述:
由于该方法会中止后台线程,因此其用法非常少 首选,并且只有在没有其他选择的情况下才应该这样做。这 停止相机的正确方法是发出停止信号然后等待 用于后台线程的完成。
因此,请考虑使用 SignalToStop 方法。
videoCaptureDevice = new VideoCaptureDevice(filterInfoCollection[cboCamera.SelectedIndex].MonikerString);
videoCaptureDevice.NewFrame += VideoCaptureDevice_NewFrame;
videoCaptureDevice.Start();
videoCaptureDevice.SignalToStop();