vb开启程序以后程序界面会“没反应”.docxVIP

  • 30
  • 0
  • 约1万字
  • 约 11页
  • 2020-11-03 发布于天津
  • 举报

vb开启程序以后程序界面会“没反应”.docx

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)

1亿VIP精品文档

相关文档