C# .NET 中视频设备未停止

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

在下面的代码中

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 窗体。

c# winforms video .net-8.0
1个回答
0
投票

文档中所述:

由于该方法会中止后台线程,因此其用法非常少 首选,并且只有在没有其他选择的情况下才应该这样做。这 停止相机的正确方法是发出停止信号然后等待 用于后台线程的完成。

因此,请考虑使用 SignalToStop 方法。

videoCaptureDevice = new VideoCaptureDevice(filterInfoCollection[cboCamera.SelectedIndex].MonikerString);
videoCaptureDevice.NewFrame += VideoCaptureDevice_NewFrame;

videoCaptureDevice.Start();
videoCaptureDevice.SignalToStop();
© www.soinside.com 2019 - 2024. All rights reserved.