我的 VB.NET 应用程序在客户端计算机上崩溃并出现 BSOD 错误...KERNEL_DATA_INPAGE_ERROR。
此错误发生在我的程序执行两件事时:
- 锁定计算机
- 在BackgroundLoop模式下播放声音
为了锁定工作站,我只是使用这个:
<DllImport("user32")> _
Public Shared Sub LockWorkStation()
End Sub
为了播放声音,我这样做:
My.Computer.Audio.Play(My.Resources.ResourceManager.GetStream("somesound"), AudioPlayMode.BackgroundLoop)
现在,此声音会循环播放,直到用户重新登录。我的软件检测到 session 状态切换并停止播放声音。有时,当我重新登录时,声卡会立即播放垃圾数据,而不是音频缓冲区的其余部分。我的印象是这与 session 切换有关。
我的客户是否会遇到锁定计算机时发生内存损坏的问题?
对于这篇文章的含糊之处,我深表歉意...我不知道从哪里开始,因为我自己无法重现该问题。
编辑:如果让声音自行播放,即使没有锁定计算机,最终计算机也会锁定,然后蓝屏。在同一时间锁定时播放声音会导致它发生得更快。
编辑#2:所以我现在看到它失败了。声音循环开始正确播放,但很快切换到垃圾数据循环。就好像它只是读取内存中的随机位置并循环它。非常奇怪的行为!
解决了!:毕竟一直都是硬件。显然,这款特定型号的笔记本电脑存在一个问题,即扬声器安装在硬盘驱动器的正上方。当大声播放声音时,会产生各种各样的问题。
最佳答案
蓝屏几乎肯定与有缺陷的硬件或驱动程序有关。从软件角度来说,除了制定解决方法之外,您实际上无能为力。
您可以perform a memory dump并尝试确定具体出了什么问题,或者通过一些巧妙的调试来查看它在哪里爆炸,以便尝试避免它。
否则,您可能正在谈论对相关机器进行一些维护工作。
关于vb.net - 播放声音资源时出现 BSOD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3764670/