就没有人知道timeSetEvent?
lTimeID = timeSetEvent(1000, 10, AddressOf TimeProc, 1, 1)
在回调函数中,只要有msgbox "1 " 之类的语句,在vb环境下可以执行,但是编译成可执行文件就会出现死机,请问是为什么?
问题补充:
Form中的
Private Sub Command2_Click()
EndCount
End Sub
Private Sub Command3_Click()
EndCount
End
End Sub
Private Sub Form_Load()
lTimeID = timeSetEvent(3000, 80, AddressOf TimeProc, 1, 1)
End Sub
模块中的
Option Explicit
Public lTimeID As Long
Dim i As Integer
Public Declare Function timeSetEvent Lib "winmm.dll " (ByVal uDelay As Long, ByVal uResolution As Long, ByVal lpFunction As Long, ByVal dwUser As Long, ByVal uFlags As Long) As Long
Public Declare Function timeKillEvent Lib "winmm.dll " (ByVal uID As Long) As Long
'timeSetEvent的回调函数
Sub TimeProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, ByVal dw1 As Long, ByVal dw2 As Long)
Form1.Text2.Text = i
i = i + 1
Call DB
End Sub
Sub EndCount()
timeKillEvent lTimeID
End Sub
Sub DB()
Form1.Text2.Text = i
MsgBox "1 "
End Sub
[解决办法]
IDE下的msgbox与运行时的msgbox工作机制不同,VB为了调试需要,前者弹出时会中断整个线程的所有消息处理进行等待,而运行时则只中断过程执行,线程消息处理仍会继续。
你可有两种选择:
1、不要使用MsgBox或模式窗体中断回调函数;
2、换用SetTimer,印象中它的调函数中可以使用MsgBox
另外,使用API的MessageBox,不知行不行,你可试试。