IVMRWindowlessControl.RepaintVideo 导致尝试除以零
IVMRWindowlessControl.RepaintVideo causing Attempted to divide by zero
我用 Directshow.NET 开发了一个 C# 应用程序来显示相机预览。几乎每台 OS 一切都进展顺利,但在 windows OS 10 台机器中的某些机器上(不是每台 OS 10 台机器,只是其中一些机器)预览因异常而失败Attempted to divide by zero.
在 Control
的 Paint
事件内的第 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 应该会自动重新安装驱动程序。
我用 Directshow.NET 开发了一个 C# 应用程序来显示相机预览。几乎每台 OS 一切都进展顺利,但在 windows OS 10 台机器中的某些机器上(不是每台 OS 10 台机器,只是其中一些机器)预览因异常而失败Attempted to divide by zero.
在 Control
的 Paint
事件内的第 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 应该会自动重新安装驱动程序。