【发布时间】:2011-04-15 10:43:45
【问题描述】:
我有一个 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)
现在,此声音会循环播放,直到用户重新登录。我的软件检测到会话状态切换并停止播放声音。有时当我重新登录时,声卡会在一瞬间播放垃圾数据,而不是音频缓冲区的其余部分。我的印象是这与会话切换有关。
我的客户是否会遇到在锁定计算机时发生内存损坏的问题?
对于这篇文章的含糊之处,我深表歉意......我不确定从哪里开始,因为我自己无法重现该问题。
编辑:如果让声音自行播放,即使没有锁定计算机,最终计算机也会锁定然后蓝屏。在锁定的同时播放声音会更快地发生。
编辑#2:所以我现在看到它失败了。声音循环开始正确播放,但很快切换到垃圾数据循环。就好像它只是读取内存中的一个随机位置并循环它。非常奇怪的行为!
已解决!毕竟一直都是硬件。显然,这种特殊型号的笔记本电脑存在扬声器安装在硬盘驱动器顶部的问题。大声播放声音会产生各种问题。
【问题讨论】:
-
它只在一台电脑上?还是所有客户的?
-
目前只有一个正在运行 XP 的测试。我自己在 6 台机器上测试过,无法重现错误。它们都运行相同版本的 XP SP3,我的客户端也在运行。
-
所以当您尝试取消声音时会发生崩溃?当工作站被锁定并且声音循环时,它永远不会发生?如果您在没有先锁定工作站的情况下执行此操作,它会崩溃吗?
-
扬声器放置的问题听起来像这样:blogs.sun.com/brendan/entry/unusual_disk_latency
-
@Simon 这是笔记本电脑:engadget.com/2009/03/26/… 我播放的声音恰好是手臂共振的确切频率,导致头部崩溃和数据损坏。由于它是一个只有 1GB 内存的上网本,交换文件被大量使用,破坏了内存。我几乎因此失去了一位重要客户。每次我们测试代码时,都很好。客户会打开扬声器为他的销售对象做演示,结果蓝屏。
标签: vb.net windows-xp audio