代码之家  ›  专栏  ›  技术社区  ›  Brad

播放声音资源时BSOD

  •  2
  • Brad  · 技术社区  · 14 年前

    我有一个VB.NET版由于BSOD错误而在客户端计算机上崩溃的应用程序。。。内核数据页错误。

    此错误发生在我的程序执行两个操作时:

    • 锁定计算机
    • 以BackgroundLoop模式播放声音

    <DllImport("user32")> _
    Public Shared Sub LockWorkStation()
    End Sub
    

    My.Computer.Audio.Play(My.Resources.ResourceManager.GetStream("somesound"), AudioPlayMode.BackgroundLoop)
    

    现在,这个声音循环直到用户重新登录。我的软件检测到会话状态切换并停止播放声音。有时当我重新登录时,声卡会在一瞬间播放垃圾数据,而不是音频缓冲区的其余部分。我觉得这和会话切换有关。

    我的客户会不会在锁定计算机时出现内存损坏的问题?

    我为这篇文章的模糊性道歉。。。我不知道从哪里开始,因为我自己无法再现这个问题。

    编辑: 如果让声音自己播放,即使没有锁定电脑,最终电脑会锁定,然后是蓝屏。在锁定的同时播放声音会使其更快发生。

    编辑#2: 所以我看到它失败了。声音循环开始正确播放,但很快切换到垃圾数据循环。这就好像它只是读取内存中的一个随机位置并循环。非常奇怪的行为!

    毕竟是硬件。显然,这种型号的笔记本电脑有一个问题,扬声器安装在硬盘驱动器的正上方。当播放声音很大时,会产生各种各样的问题。

    1 回复  |  直到 14 年前
        1
  •  4
  •   Paul Lammertsma    14 年前

    蓝屏几乎肯定与有缺陷的硬件或驱动程序有关。软件方面,除了建立一个解决方案之外,你真的没有什么可以做的。

    你可以 perform a memory dump 并试图确定具体出了什么问题,或者通过一些巧妙的调试,看看它在哪里爆炸,以尽量避免它。