简单WPF编程中的错误会触发蓝屏吗?

简单WPF编程中的错误会触发蓝屏吗?,wpf,crash,Wpf,Crash,我正在用WPF做一些.NET编程,包括读取.png和.txt文件,将图像放在画布上,移动它们,然后删除它们,突然我看到了一个蓝屏。我不认为我的小修补会引起驱动程序问题,直到我重新启动并对我的程序做了完全相同的事情,我又遇到了一个驱动程序错误。似乎一个英特尔图形驱动程序失败了,我的分辨率下降了很多。不过第二次没有蓝屏。我玩得很快,从画布的子元素中添加和删除元素。我的问题是,如此简单的编程怎么会导致如此严重的错误,我该如何修复它 作为一阶近似值,所有的蓝屏都是由小车司机引起的,而大多数司机的bug都

我正在用WPF做一些.NET编程,包括读取.png和.txt文件,将图像放在画布上,移动它们,然后删除它们,突然我看到了一个蓝屏。我不认为我的小修补会引起驱动程序问题,直到我重新启动并对我的程序做了完全相同的事情,我又遇到了一个驱动程序错误。似乎一个英特尔图形驱动程序失败了,我的分辨率下降了很多。不过第二次没有蓝屏。我玩得很快,从画布的子元素中添加和删除元素。我的问题是,如此简单的编程怎么会导致如此严重的错误,我该如何修复它

作为一阶近似值,所有的蓝屏都是由小车司机引起的,而大多数司机的bug都是在比赛条件下产生的。(见脚注1)也就是说,不一定是具体的操作,而是它们与你无法控制的其他事物相互作用的确切时间

所以,如果你能把它归结为一系列的操作,那么你就可以避免这些操作。但通常唯一的解决办法是得到更好的驱动程序,而不一定是最新的驱动程序,有时最好还是回到旧的驱动程序

脚注:

1当然,并非所有的蓝屏都是驱动程序,但它们都来自内核模式,用户模式代码永远不可能在内核模式下发出崩溃的调用,因此当您点击蓝屏时,您发现在内核模式下运行的某些组件中存在错误。根据定义,蓝屏不是你的bug(2)(或者不仅仅是你的bug)


2除非您编写驱动程序。

听起来您的图形驱动程序有问题。WPF本身不能触发蓝屏——但WPF确实调用DirectX,而DirectX又调用图形驱动程序——如果图形驱动程序包含bug,则可能导致蓝屏


您无法在WPF级别修复此问题,因为WPF在这个特定问题中是无辜的。您需要更新图形驱动程序。如果没有更新或最新版本未修复,一个可能的解决方法是禁用WPF的硬件加速,因为这可能会避免碰到驱动程序的错误位。

尝试禁用WPF硬件渲染(DirectX),看看问题是否消失:

摘录:

禁用硬件加速选项 HKEY\U当前用户\软件\ Microsoft\Avalon.Graphics\DisablehAcceleration

德沃德

禁用硬件加速选项使您能够出于调试和测试目的关闭硬件加速。当您在应用程序中看到渲染工件时,请尝试关闭硬件加速。如果工件消失,问题可能出在您的视频驱动程序上


禁用硬件加速选项是0或1的DWORD值。值为1将禁用硬件加速。如果系统满足硬件加速要求,值为0将启用硬件加速;有关更多信息,请参阅图形渲染层。

@Chaos:我记得有一次,在一个贸易展上,有一批新机器,它们有新的图形卡,带有新的驱动程序,工作得很好,但是当你在屏幕上画画时,音频会播放不稳定。我们的产品是一个音频编辑器。你是说,即使问题发生在我使用完全相同的软件的同一瞬间,但问题是由驱动程序引起的,并且在另一台有另一个驱动程序的计算机上,我的程序也能正常工作?很可能。事实上,每次在你的机器上“完全相同的时刻”都会发生,这并不排除驱动程序:毕竟,驱动程序错误也是可以复制的!最好的方法是尝试一下:如果它在完全相同的时刻在另一台具有不同图形卡的计算机上崩溃(不仅仅是同一驱动程序的不同版本,因为这仅仅意味着两个版本之间的错误尚未修复),那么这就指向Windows图形子系统中的错误;否则它会指向您特定机器上的驱动程序中的错误。我该怎么做?它是一个系统设置,一个VisualStudio设置,还是我在代码本身中修改的东西?如响应中所述,它是一个注册表设置。这仅用于测试目的,以帮助确定问题是否确实是您的视频驱动程序造成的。不幸的是,这不是你应该在生产中做的事情。