1

这是我的应用程序状态:

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

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

我能做些什么来解决这个问题?如何同时下载多个文件?


编辑:

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

4

2 回答 2

3

你用什么进行实际的http下载?我会尝试简单异步下载并忘记 MDIForm。真的!

于 2009-10-04T20:11:34.763 回答
2

VB6 本身是单线程的。所以打破下载到不同的形式不会帮助你。

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

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

  1. 您在 ActiveX EXE 对象上调用 Download 方法
  2. 在下载方法中,您实例化 Timer 并让它几乎立即启动。
  3. 您退出了 Download 方法,从而将控制权交还给调用它的实体。
  4. 然后您通过事件(例如 DownloadProgress 或 DownloadComplete 等...)与主应用程序进行通信
于 2009-10-05T02:40:51.167 回答