VB6 - Inet挂起 - 多个表单实例

时间:2009-10-02 15:42:04

标签: vb6 multiple-instances inet

这是我的应用状态:

目的 - 从互联网下载多个列表文件 方法 - 创建了一个简单的“下载表单”。过了一段时间,我只需要更多表单,因为我有多个文件列表要下载。刚解决这个问题,通过在我的项目中添加一个MDIform,添加一个按钮来创建另一个“下载表单”实例并vo。显然,我的问题已经解决了。但不是:(

当我在我的form-instance3中按下“下载”按钮时,其他表单实例(2和1)在下载内容时挂起(有时会出现超时),直到form-instance3终止所有下载等等,对于所有其他形式。所以,即使我知道我的应用程序不是多线程的,同一个表单的多个实例也存在冲突(可能是Inet组件),我无法同时下载多个文件。 Inet和我的下载功能在表单中定义。

我该怎么做才能解决这个问题?如何同时下载多个文件?

非常感谢

编辑:

我正在尝试使用“wqw”建议,但我遇到了一些问题: 在download_form中,我有一个MSHFlexgrid,有两列:一列是URL,另一列是文件命名。我正在迭代抛出所有行来下载文件并保存它们。使用“wqw”建议的方法,我如何区分每个下载,以便我可以使用网格中指示的正确名称保存它?

2 个答案:

答案 0 :(得分:3)

你对实际的http下载有什么用?我会尝试Simple Asynchronous Downloads而忘记MDIForm。真!

答案 1 :(得分:2)

VB6本身就是单线程的。所以打破下载到不同的形式将无济于事。

我过去使用的是Timer objectActiveX EXE。这种方法使您能够在一个位置本地化所有下载逻辑,像控制常规对象一样控制它,并使其在单独的EXE中运行,因此默认情况下使其成为多线程。

所以它的工作方式是这样的:

  1. 您在ActiveX EXE对象上调用Download方法
  2. 在下载方法中,您实例化Timer并立即启动它。
  3. 您退出了下载方法,从而将控制权交还给调用它的实体。
  4. 然后通过活动(例如DownloadProgress或DownloadComplete等等)与主应用程序进行通信。