IVMRWindowlessControl.RepaintVideo 导致尝试除以零

IVMRWindowlessControl.RepaintVideo causing Attempted to divide by zero

我用 Directshow.NET 开发了一个 C# 应用程序来显示相机预览。几乎每台 OS 一切都进展顺利,但在 windows OS 10 台机器中的某些机器上(不是每台 OS 10 台机器,只是其中一些机器)预览因异常而失败Attempted to divide by zero.ControlPaint 事件内的第 hr = vmr9Control.RepaintVideo(hControl.Handle, gHDC); 行。

我搜索了很多以找到这个异常的原因,甚至我格式化了其中一台机器,但问题仍然存在。此外,根据观察,第一次尝试预览时不会出现此异常,在显示预览和停止预览的 5-6 次迭代后会导致此异常。

private void SetupGraph(DsDevice dev, Control hControl)
{
...
vmr9Control = (IVMRWindowlessControl)vmr9preview;
vmr9Control.SetVideoClippingWindow(hControl.Handle);
vmr9Control.SetAspectRatioMode(VMRAspectRatioMode.None);
hControl.Paint += new PaintEventHandler(hControl_Paint);
...
}

[System.Security.Permissions.SecurityPermission(
System.Security.Permissions.SecurityAction.LinkDemand, Flags =
System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)]
void hControl_Paint(object sender, PaintEventArgs e)
{
    if (isPreviewstarted && vmr9Control != null)
    {
        int hr;
        IntPtr gHDC = e.Graphics.GetHdc();
        hr = vmr9Control.RepaintVideo(hControl.Handle, gHDC);
        DsError.ThrowExceptionForHR(hr);
        e.Graphics.ReleaseHdc(gHDC);
    }            
}

我建议您卸载重新安装显卡驱动程序

步骤:卸载重新安装显示驱动程序

要从设备管理器中删除显示驱动程序:

一个。单击开始按钮或在搜索框中键入设备管理器,打开设备管理器

b。如果系统提示您输入 管理员密码 或进行确认,请键入密码或进行确认。

c。查找 显示适配器驱动程序,右键单击它并 select 卸载

d。 重新启动 计算机。

e。重新启动时,Windows 10 应该会自动重新安装驱动程序。