Как избежать белого пустого экрана? - PullRequest
1 голос
/ 13 октября 2009

Использование VB6

Во время выполнения он отображал белый пустой экран во время работы с базой данных, Как избежать белого пустого экрана в VB6.

БЕЛЫЙ ЧЕРНЫЙ ЭКРАН ОЦЕНИТСЯ (КОГДА ЭТО РАБОТАЕТ С БАЗАМИ ДАННЫХ).

Как этого избежать?

Ответы [ 5 ]

4 голосов
/ 13 октября 2009

Полагаю, вы имеете в виду, что графический интерфейс не будет перерисовываться при выполнении длительной операции. (На самом деле не должно быть так заметно, начиная с Vista, но я отвлекся).

Если ваша длительная операция состоит из нескольких шагов или замкнутых циклов, то вы можете время от времени выдвигать вызов на DoEvents, чтобы форма оставалась отзывчивой даже при выполнении работы.

Другой вариант - перенести вашу долгосрочную работу в отдельный поток, но в последний раз я посмотрел, что это не совсем тривиально или просто невозможно в VB6.

1 голос
/ 13 октября 2009

Я опубликовал это как ответ на другой вопрос, но здесь применима и схема:

VB6, сам по себе, является однопоточным. Тем не менее, вы можете сделать его несколько многопоточным с помощью ActiveX EXE, которые запускаются в своем собственном процессе, но все еще привязаны к оригинальному VB6-созданному EXE.

В прошлом я использовал объект Timer в сочетании с ActiveX EXE. Этот подход даст вам возможность локализовать всю логику загрузки в одном месте, управлять ею так, как будто вы управляете обычным объектом, и запускать его в отдельном EXE, таким образом по умолчанию делая его многопоточным.

Итак, как это работает, так:

Вы вызываете метод LongRunningOperation для объекта ActiveX EXE В методе LongRunningOperation вы создаете экземпляр Timer и запускаете его практически сразу. Вы выходите из метода LongRunningOperation, тем самым возвращая управление объекту, который его вызвал. Затем вы возвращаетесь к основному приложению через события (например, LongRunningOperationProgress или LongRunningOperationComplete и т. Д ...)

Я рекомендую Объект таймера от Карла Петерсена .

1 голос
/ 13 октября 2009

Это на самом деле та же проблема, что и ваш вопрос " Как немедленно выйти из программы ". В обоих случаях проблема заключается в том, что ваша операция с базой данных блокирует выполнение программы VB6.

  • Ответ , который вы приняли для другого вопроса - используйте ADO для асинхронного выполнения операций - также решит эту проблему с пустым экраном.
  • Или, если хотите, следуйте одному из моих предложений в моем ответе на другой вопрос и используйте компонент рабочего фона .NET через Interop, например this .
  • Или следуйте моему другому предложению и делегируйте работу с базой данных в exe-файл ActiveX , например, . РЕДАКТИРОВАТЬ AngryHacker хороший ответ на этот вопрос использует этот метод.
1 голос
/ 13 октября 2009

Вы должны работать с базой данных в отдельном потоке, и любая трудоемкая операция также должна выполняться в отдельном потоке. В этом случае ваш пользовательский интерфейс не будет заморожен.

0 голосов
/ 13 октября 2009

Ваш первый инстинкт должен состоять в том, чтобы поместить ваши ресурсоемкие операции в отдельный поток. Это немного сложно в VB6, хотя возможно (но не рекомендуется), если вы вызываете собственный API CreateThread.

Вы также можете перейти на VB.NET и использовать нативные объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...