我做一个监控报警程序,达到一定条件就显示红色并且音箱发出报警声音。
我用一个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