VB6 - Зависает Inet - несколько экземпляров формы

StackOverflow https://stackoverflow.com/questions/1510340

  •  19-09-2019
  •  | 
  •  

Вопрос

Вот статус моего приложения:

Цель - загрузить несколько файлов списка из Интернета Подход - создал простую "форму загрузки".Через некоторое время мне просто понадобилось больше форм, потому что у меня было более одного списка файлов для загрузки.Просто решил это, добавив MDIform в мой проект, добавьте кнопку для создания другого экземпляра "загрузить форму" и вуаля.По-видимому, моя проблема была решена.Но нет :(

Когда я нажимаю кнопку "загрузить" в моей форме-instance3, другие экземпляры формы (2 и 1) зависают при загрузке содержимого (иногда я получаю тайм-аут) до тех пор, пока form-instance3 не завершит все загрузки и так далее для всех других форм.Итак, хотя я знаю, что мое приложение не является многопоточным, несколько экземпляров одной и той же формы находятся в конфликте (предположительно, компонент Inet), и я не могу загрузить несколько файлов одновременно.Inet и моя функция загрузки определены в форме.

Что я могу сделать, чтобы решить эту проблему?как я могу загрузить несколько файлов одновременно?

Большое спасибо

Редактировать:

Я пытаюсь использовать предложение "wqw", но я сталкиваюсь с некоторыми проблемами:В download_form у меня есть MSHFlexGrid с 2 столбцами:один с URL-адресом, а другой с судьбой файла.Я повторял выбрасывание всех строк, чтобы загрузить файлы и сохранить их.С подходом, предложенным "wqw", как я могу отличить каждую загрузку, чтобы я мог сохранить ее с правильным именем, указанным в таблице?

Это было полезно?

Решение

Что вы используете для фактической загрузки по http?Я бы попробовал Простые Асинхронные загрузки и забудьте о MDIForm.В самом деле!

Другие советы

VB6, сам по себе, является однопоточным.Таким образом, прерывание загрузки в разные формы вам не поможет.

То, что я использовал в прошлом, - это Объект таймера в сочетании с ActiveX EXE - файл.Такой подход даст вам возможность локализовать всю логику загрузки в одном месте, управлять ею, как обычным объектом, и запускать ее в отдельном EXE-файле, таким образом, по умолчанию делая ее многопоточной.

Итак, способ, которым это работает, выглядит следующим образом:

  1. Вы вызываете метод загрузки для объекта ActiveX EXE
  2. В методе загрузки вы создаете экземпляр таймера и запускаете его почти сразу.
  3. Вы выходите из метода загрузки, тем самым возвращая управление объекту, который его вызвал.
  4. Затем вы возвращаетесь в основное приложение с помощью событий (напримерDownloadProgress или DownloadComplete и т.д.)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top