Doevents用法难点
发布网友
发布时间:2024-09-07 04:28
我来回答
共1个回答
热心网友
时间:2024-10-22 05:46
在VB编程中,DoEvents语句的使用可能会遇到一些难点。首先,当程序在DoEvents后,即使Form卸载,由于循环控制未卸载,程序仍会继续执行,直到遇到Exit Do语句。例如:
Private Sub Command1_Click()
Dim L As Long
IsExit = False
Do
If IsExit = True Then Exit Do '句0
DoEvents '** 句1'
Text1.Text = CStr(L) '** 句2'
L = L + 1
Loop
End Sub
解决这个问题的关键在于理解代码运行路径:当Form卸载后,如果在DoEvents后立即遇到Form_Load事件,会导致程序重新加载Form并执行句2,即使控件已经不存在。
对于速度问题,使用DoEvents会显著降低程序效率,可以通过使用API函数GetInputState来优化,如:If GetInputState() Then DoEvents。这可以*DoEvents的执行频率,提升程序响应速度。
在长循环中,既要响应事件又不使控件闪烁,可以调整DoEvents的使用时机。例如,使用ValidateRect函数来避免控件重画,或仅在必要时才调用DoEvents。代码片段如下:
Private Sub Command1_Click()
'...略去代码...
While Abs(timeGetTime - Kt) < 50 '句3
'...略去DoEvents... '句5
Wend
最后,如果程序在循环中因时间设定过短而“死亡”,可以在句1处加入DoEvents以避免问题。而在处理全局数据时,应谨慎使用DoEvents,以免影响数据的正确性。