当前位置: 代码迷 >> VB Dotnet >> 为什么在Timer里不能播放声音?该怎么处理
  详细解决方案

为什么在Timer里不能播放声音?该怎么处理

热度:60   发布时间:2016-04-25 02:12:35.0
为什么在Timer里不能播放声音?
我做一个监控报警程序,达到一定条件就显示红色并且音箱发出报警声音。
我用一个timer控件每隔10秒去检测条件是否达到,代码大概如下:

Public Declare Function PlaySound Lib "winmm.dll" (ByVal lpszSoundName As String, ByVal hModule As Integer, ByVal dwFlags As Integer) As Integer
    Const SND_FILENAME As Integer = &H20000
    Const SND_ALIAS As Integer = &H10000
    Const SND_SYNC As Integer = &H0
    Const SND_ASYNC As Integer = &H1
    Const SND_LOOP As Integer = &H8
'上面调用API函数来播放声音

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    if 条件=true then
        label1.BackColor = System.Drawing.Color.Red   'label1背景颜色变成红色
        PlaySound(GetPath() + "\baojin.wav", 0, SND_LOOP Or SND_ASYNC)  '调用API函数来播放声音
    else
        label1.BackColor = System.Drawing.Color.Red   'label1背景颜色变成蓝色
        PlaySound(vbNullString, 0, 0)        ‘调用API函数停止播放声音
    end if
End Sub

当条件一直为true时,label1的背景一直为红色,但是没有播放声音。如果把播放声音的命令放在窗体的Load事件里,是可以播放声音的,如下:
Private Sub frmABC_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    PlaySound(GetPath() + "\baojin.wav", 0, SND_LOOP Or SND_ASYNC)
End Sub

之前使用 .NET 自带的类库 System.Media 下面的 SoundPlayer 来播放音乐的方式,结果也一样,在Load里可以播放声音,在Timer里就不能播放声音,请问是为什么?怎么处理?
------解决方案--------------------
    if 条件=true then
if label1.BackColor <> System.Drawing.Color.Red then
         label1.BackColor = System.Drawing.Color.Red   'label1背景颜色变成红色
        PlaySound(GetPath() + "\baojin.wav", 0, SND_LOOP Or SND_ASYNC)  '调用API函数来播放声音
end if
    else
         label1.BackColor = System.Drawing.Color.Red   'label1背景颜色变成蓝色
        PlaySound(vbNullString, 0, 0)        ‘调用API函数停止播放声音
    end if
  相关解决方案