开一个线程用来从ftp下载文件,同时想通过进度条来显示下载进度,如何做? ( 积分: 50 )

  • 主题发起人 主题发起人 zzutlink
  • 开始时间 开始时间
Z

zzutlink

Unregistered / Unconfirmed
GUEST, unregistred user!
当前我用一个线程从FTP下载文件,已经正常使用了,但不知道如何使主界面上的进度条同步显示下载进度,请大家给我说说实现的方法吧。
 
当前我用一个线程从FTP下载文件,已经正常使用了,但不知道如何使主界面上的进度条同步显示下载进度,请大家给我说说实现的方法吧。
 
再补充一下,我用的是IdFtp控件来做的FTP下载,从代码上只有IdFtp.Get这么一句,我现在是想对这中间下载的进度进行显示。不用线程的时候,可以通过IdFtp.OnWork来实现,但下载稍微大一点的文件就会导致界面假死,所以用线程,但我不知道如何再实现进度条。
 
idftp有一个demo的,你看它里面是怎么实现的,还有由于你访问了可视化vcl控件,所以,你必须使用同步,否则即使用了多线程,界面一样要死的。你遇见的问题可能是线程里面怎么对控件的事件添加代码?其实这个简单,你写一个和idftp的onwork事件一样的过程,然后idftp.onwork:=这个过程就可以了。
 
看demo里面的例子多大的数据量也不会死界面,上面有一个控件是用来是屏幕不死的。像一个小手机那个
 
通过发消息把IdFtp.OnWork发出.
 
通过消息发送是不是有点夸张哦,只要onwork,那就不停的发送消息,没有实际意义吧,而且也没有必要,这样处理消息不是理智的选择哦!
 
把indy的IdAntiFreeze控件放上就可以了,什么都不用改动,呵呵。已经解决了,谢谢各位。
但是出现了另一个问题,就是我下载完了之后,我用Close去关掉当前窗口,居然关不掉。
 
看看下载完把 IdAntiFreeze 的 Active 置为false 行不行
 
在closequert事件中要先停止线程和closeINDY控件,或freeINDY控件
 
关不掉应该提示有错误信息了,提示什么信息出来了?
 
没有错误信息,没有任何提示。
我现在通过别的方法先解决了,放了个timer,当下载完毕设置timer.enable:=true了。
解决了就行,散分了。
 
多人接受答案了。
 
后退
顶部