1

これが私のアプリのステータスです:

目的 - インターネットから複数のリスト ファイルをダウンロードする アプローチ - 簡単な「ダウンロード フォーム」を作成しました。しばらくすると、ダウンロードするファイルのリストが複数あったため、さらにフォームが必要になりました。プロジェクトに MDIform を追加し、別の「ダウンロード フォーム」インスタンスを作成するためのボタンを追加して、これを解決しました。どうやら、私の問題は解決しました。しかし、いいえ:(

form-instance3 で「ダウンロード」ボタンを押すと、form-instance3 がすべてのダウンロードを終了するまで、他のフォーム インスタンス (2 と 1) がコンテンツのダウンロードでハングします (時々タイムアウトが発生します)。他のフォーム。そのため、アプリがマルチスレッド化されていないことはわかっていても、同じフォームの複数のインスタンスが競合しており (おそらく Inet コンポーネント)、複数のファイルを同時にダウンロードすることはできません。Inet と私のダウンロード機能はフォームで定義されています。

これを解決するにはどうすればよいですか? 複数のファイルを同時にダウンロードするにはどうすればよいですか?


編集:

「wqw」の提案を使用しようとしていますが、いくつかの問題に直面しています: download_form には、2 つの列を持つ MSHFlexgrid があります。1 つは URL で、もう 1 つはファイルの運命です。ファイルをダウンロードして保存するために、すべての行をスローすることを繰り返していました。「wqw」によって提案されたアプローチでは、グリッドに示されている適切な名前で保存できるように、各ダウンロードをどのように区別できますか?

4

2 に答える 2

2

VB6 自体はシングル スレッドです。したがって、さまざまなフォームへのダウンロードを分割しても役に立ちません。

私が過去に使用したのは、 ActiveX EXEと組み合わせたTimer オブジェクトです。このアプローチにより、すべてのダウンロード ロジックを 1 か所にローカライズし、通常のオブジェクトを制御するように制御し、別の EXE で実行することができるため、デフォルトでマルチスレッドになります。

したがって、これが機能する方法は次のようになります。

  1. ActiveX EXE オブジェクトで Download メソッドを呼び出します。
  2. ダウンロード メソッドでは、Timer をインスタンス化し、ほぼ即座に開始します。
  3. Download メソッドから抜け出し、それを呼び出したエンティティに制御を戻します。
  4. 次に、イベント (DownloadProgress や DownloadComplete など) を介してメイン アプリに通信します。
于 2009-10-05T02:40:51.167 に答える