我在一个程序中发现的,窗体中一个 timer 控件,间隔500ms,enabled属性为true.在vb开发环境中运行时:
如果调用了 msgbox 函数,在函数返回前,是不会发生 timer事件的,也就是说程序挂起了,等待msgbox 函数返回。编译成EXE文件,双击这个文件运行:
如果调用了 msgbox 函数,在函数返回前(也就是点击确定按钮之前),一直发生timer事件.这个问题给我带来很多麻烦,有时候在开发环境中调的好好的程序,一旦生成exe就坏菜了。随碰到过类似问题,或有解决方法,帮帮忙,谢谢了。
如果调用了 msgbox 函数,在函数返回前,是不会发生 timer事件的,也就是说程序挂起了,等待msgbox 函数返回。编译成EXE文件,双击这个文件运行:
如果调用了 msgbox 函数,在函数返回前(也就是点击确定按钮之前),一直发生timer事件.这个问题给我带来很多麻烦,有时候在开发环境中调的好好的程序,一旦生成exe就坏菜了。随碰到过类似问题,或有解决方法,帮帮忙,谢谢了。
举个例子吧
就像这样:
private m_X as long private sub timer1_timer()
m_X=m_X+1
end subprivate sub Command1_click()
msgbox "如果是EXE,则现在m_X+1一直在增大,如果在VB开发环境中运行,则m_X+1现在是不变的,等你点了确定,它才开始增大"
end sub
Dim i As IntegerPrivate Sub Form_Load()
i = 0
End SubPrivate Sub Timer1_Timer()
Me.Print i
If i = 5 Then
If MsgBox("是否停止?", vbYesNo + vbInformation, "提示") = vbYes Then
Timer1.Enabled = False
Exit Sub
End If
End If
i = i + 1
End Sub
你可以试试,vb开发环境中运行,程序启动后,等待几秒,返回的m_X的值是不一样的。。
说明timer事件已经发生了。。
一直都以为msgbox会挂起程序,没想到编译后就变了
Dim X As LongPrivate Sub Command1_Click()
Timer1.Enabled = True '启动计时器
MsgBox "如果是从EXE运行,则下一个msgbox会显示 非 0,如果在vb开发环境中运行, 则下一个msgbox会显示 0"
MsgBox X
End SubPrivate Sub Form_Load()
Timer1.Interval = 100
Timer1.Enabled = False
End SubPrivate Sub Timer1_Timer()
X = X + 1
End Sub如果用 sp5 或 sp6 的朋友没有这个问题,请告诉我。
我这的网速太慢,我想先 确定 是否能解决问题,再去下载 补丁,
帮帮忙,谢了!!
开发时应该以exe为准吧。
我上传了代码,可以直接down下来运行看看
http://lqweb.nease.net/timer.zip
http://community.csdn.net/Expert/topic/3472/3472337.xml?temp=.2961847