上网找让程序暂停的方法,那一堆代码中出现个DoEvents,就这么简单?至今没实现过。现在又想要实现一个功能了,就是程序运行一些程序时很卡,要等它操作完成才能操作,比如我下载个文件,用了函数URLDownloadToFile,程序就死在那了,等它下载完才能动,但是这太让人不高兴了,所以有什么办法解决这个问题吗?还有一些循环,如果我操作一个数据库,有几千条记录,就算我只是修改一个数据,也会卡。上网找又说DoEvetns好用,郁闷了,我用了怎么不行?代码如下
Label1.Caption = "正在下载..."DoEvents'根据别人的做法,这个没有的,但是没达到效果我就加了一个在这里
ret = URLDownloadToFile(0, Text1.Text, "c:/百度.mp3", 0, 0)
DoEventsIf ret = 0 Then Label1.Caption = "下载完成"
End If

解决方案 »

  1.   

    本帖最后由 bcrun 于 2011-04-12 11:02:07 编辑
      

  2.   

    VB程序是单线程的,Doevents在这种时候不管用
    VB搞多线程不好弄,可以考虑单独再做一个ActiveXexe去干这些事情
    需要下载的时候,主程序把地址扔给ActiveXexe,让它去慢慢下载,主程序应该就不会卡了。楼主说的数据库卡一下的问题,当年也碰到过,想了很多办法也没有完全解决。后来想到可以用ActiveXexe试试,可惜还没动手就辞职了,是否有效也就成了悬案,呵呵。
    可以参看一下MSDN里面的Coffee示例程序
      

  3.   

    doevents是有用的,不过在你的代码中,应该加在函数 URLDownloadToFile中,你下载文件应该也是一个个的数据块下载吧,把doevents放在每个数据块下载完成后就可以了。
    for ........
    '下载一个数据块
    ....
    ....
    ....
    doevents
    next 
    yachong 的建议很具有建设性。
      

  4.   

    谁告诉你DoEvents是让程序暂停一下的???DoEvents的作用是处理当前在消息队列里面没有处理的事件。Do,做,Event,事件。多学习下英语。
      

  5.   

    大家解析下,DoEvents是放在处理代码的前面还是放在后面的?程序不是按顺序执行的吗?放在哪个地方感觉都不正确似的?放在前面,把控制权转交了,继续做下面的?要是这样的话那放在程序的开始不就可以永保不卡?如果放在后的话,程序执行到卡的地方就挂着了,还执行下去啊?
      

  6.   

    没有办法。除非分块下载(服务器支持分块的话),在分块之间插入DoEvents
      

  7.   

    你的URLDownloadToFile函数的使用方法根本不对.需要继承一个接口.http://www.m5home.com/blog/default.asp?id=395
      

  8.   

    你这里URLDownloadToFile是一个单元函数,DoEvents加后面的含义是当URLDownloadToFile执行完了后让程序暂停来处理别的事情,拿你恰恰是想在URLDownloadToFile中进行程序暂停,所以这样写没有效果。
    较好的办法是用多线程,在独立线程中执行URLDownloadToFile。.net 2.0/3.0中可以通过BackgroundWork来方便的实现,而VB6就比较困难了。
      

  9.   

    很有用,不过
    DoEvents是运来腾出时间来处理系统的其他响应,并不等同让程序暂停下来。
    这个东西用在循环里很有用!