- 30
- 0
- 约1万字
- 约 11页
- 2020-11-03 发布于天津
- 举报
Vb 开启程序以后程序界面会“没反应”
在 VB 编程的时候,很多人肯定碰到过开启程序以后程序界面会“没反 应”,“没有响应”,但是我们代码要求执行的任务还在正常的进行, 任务执行完毕,程序界面又恢复正常,尤其是使用循环的时候很容易出 现程序没响应的现象, 这类问题怎么解决呢?用 DoEv*nts 就可以解决。 举例: Private Sub DelayTime(num As Long) Dim star, ends As Long star = timeGetTime ends = star
Do While ends - star num
ends = timeGetTime
DoEv*nts
Loop
End SubDoEv*nts 是: 转让控制权, 以便让操作系统处理其它的事件。 最简单的理解,比如你要在某个耗时很多的过程中 (最常见的是循环) , 还要响应某个操作-比如控制进度条的显示,那就需要加入 DoEv*nts 但是, 当看到这句话时, 脑子里面的概念很模糊, 只有一个浅薄的认识。 打个比 方:如果现在有一个从 1 到 100000000 的循环,有一点编程常识的人肯定知道 在这个耗时较长的循环过程中, 基本上是不能进行别的操作 (当然不排除一些特 别的情况),但是因为某些特别的要求,你要在循环过程中,进行其他操作,这 时 DoEv*nts 就派上用场了。
现在,大家应该明白了 DoEv*nts 的主要功能了吧。下面举一些实例(基本上都 是转载的),当然建议自己能亲自去试验,理解会深一些。
( 注 : ** 后面的代码表示如果在该处用了这个语句 以下代码中用到了一些 api 函数,请用Vb附带的api浏览器查阅)(转载)
基本用法:
窗体启动时如果要处理的事务太多或者用 sleep 函数暂停 , 造成其很久都不能 出现时怎么办 ?
例如代码 :
Private Sub Form_Load()
Show
**DoEv*nts
Sleep 5000
End Sub
通常容易想到在sleep前加个show,但还是不能达到预想的效果,窗体虽然出来 了, 但好象只达到了一半 , 如果加上第 3 句, 将看到效果大不相同
如果有个很耗时的循环导致程序不响应 , 怎么办? 例如:
Dim L As Long
For L = 1 To 1000000
** DoEv*nts
Next L
如果无 **, 在循环过程中程序无法处理事件 , 对于用户来说是不响应 , 无法控制 的
想在循环中看到处理过程 ?
同样:
Dim L As Long
For L = 1 To 10000
** DoEv*nts
Text1.Text=Cstr(l)
Next L
无** 时将无法看到 text1 中的变化,而只在循环结束时看到最后结果
怎样中止循环 ?
如果有:
Private Sub Command3_Click()
Dim L As Long
Do
L = L + 1
Debug.Print L
DoEv*nts
Loop
End Sub 会发现当关闭窗口后 ,debug 中的数据仍然在变化 , 说明并没结束 需要如下 :
Dim IsExit As Boolean
Private Sub Command1_Click()
Dim L As Long
IsExit = False
Do While DoEv*nts
If IsExit = True Then Exit Do
L = L + 1
Loop
End Sub
Private Sub Command2_Click() 或者在 form_unload 模块中等等
IsExit = True
End Sub
其中 isexit 是全局变量
V >有些人喜欢用end语句来结束程序,小程序固然可以,但当太大,或者调用了某 些特殊的 api 函数后可能导致预想不到的错误 , 如果装载了许多东西在程序结束 时不处理将卸载很慢 , 而且这种做法也极不符合正规软件的要求 ... 总之 end 语 句毛病很多 , 此不详谈, 建议少使用甚至不使用
其基本用法大概就这些 , 现在解析其中的一些 [ 难点]
为什么还是不能结束 ? 代码如下 :
Dim IsExit As Boolean
Private Sub Command1_Click()
Dim L As Long
IsExit = False
Do
If IsExit = True Then Exit Do 句 0
DoEv*nts ** 句 1
Text1.Text = CStr(L) ** 句 2
L = L + 1
Loop
End Sub
Private Sub Form_Load()
Static N As Long
N
原创力文档

文档评论(0)