- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DoEvents函数详解
DoEvents函数的功能是:转让控制权,以便让操作系统处理其它的事件。?问:为什么要用doevents??A. 在需要用某一循环处理相当耗时或者很快速的代码时,就需要用到它,以便用户能在起处理过程中能做其他事情,即程序能被控制,而不是无响应状态?B. vb6.0中多线程vb代码极度不稳定,而且无法调试,所以vb中的多线程用的很少(注:是指vb的代码在多线程中运行时不稳定)?C. timer控件可以起到后台运行作用,但其是通过事件控制,一是不稳定,二是速度太慢,如果想用其处理高速又耗系统的代码更本不能达到预期的效果?下面将其某些用法和难点简介如下:??????????(注: 1.** 后面的代码表示如果在该处用了这个语句。2.例子中会用到API函数。3.以下例子都经vb6.0测试成功)?????一. 基本用法1.窗体启动时如果要处理的事务太多或者用sleep函数暂停,造成其很久都不能出现时怎么办?????例如代码:?????Public Declare Sub Sleep Lib kernel32 (ByVal dwMilliseconds As Long)此句写入模块????Private Sub Form_Load()?????Show?????**DoEvents??句3????Sleep 5000?????End Sub?????通常容易想到在sleep前加个show,但还是不能达到预想的效果,窗体虽然出来了,但好象只达到了一半,如果加上第3句,将看到效果大不相同 。????2.如果有个很耗时的循环导致程序不响应,怎么办??????例如:?????Dim L As Long?????For L = 1 To 1000000?????** DoEvents?????Next L?????如果无**,在循环过程中程序无法处理事件,对于用户来说是不响应,无法控制的????3.想在循环中看到处理过程??????同样:?????Dim L As Long?????For L = 1 To 10000?????** DoEvents?????Text1.Text=Cstr(l)?????Next L?????无** 时将无法看到text1中的变化,而只在循环结束时看到最后结果????4.怎样中止循环??????如果有:?????Private Sub Command1_Click()?????Dim L As Long?????Do??????L = L + 1??????Debug.Print L??在立即窗口中显示?????DoEvents?????Loop?????End Sub?????会发现当关闭窗口后,debug中的数据仍然在变化,说明并没结束?????需要如下:?????Dim IsExit As Boolean?????Private Sub Command1_Click()?????Dim L As Long??????IsExit = False??????Do While DoEvents??????If IsExit = True Then Exit Do??????L = L + 1??????Loop?????End Sub??????????Private Sub Command2_Click()或者在form_unload模块中等等??????IsExit = True?????End Sub?????其中 isexit是全局变量?????有些人喜欢用end语句来结束程序,小程序固然可以,但当太大,或者调用了某些特殊的api函数后可能导致预想不到的错误,如果装载了许多东西在程序结束时不处理将卸载很慢,而且这种做法也极不符合正规软件的要求...总之end语句毛病很多,此不详谈,建议少使用甚至不使用?二. 其基本用法大概就这些,现在解析其中的一些[难点]??????????1.为什么还是不能结束??????代码如下:?????Dim IsExit As Boolean?????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??????????Private Sub Form_Load()?????St
原创力文档


文档评论(0)