Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > .NET: Общие вопросы > Заставка перед загрузкой DLL


Автор: Zaharius 03.11.16, 18:10
Программа на VB.NET имеет загружается около 2-3 минут, т.к. подгружает множество баз данных и имеет длительную процедуру инициализации, а также подключает массивные DLL-файлов. Чтобы скрыть эффект «зависания» включен в Sub Main запускаю в новом потоке заставку с прогрессбаром:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Dim t = New Thread(New ThreadStart(AddressOf SplashStart))
    t.Start()
     
        Public Sub SplashStart()
            Application.Run(New frmSplash) ‘Окно заставки
        End Sub


Тем не менее проблема зависания решилась только наполовину: окно заставки появляется только после загрузки всех DLL, а это почти минута.
Как заставить прогрессбар появиться сразу после запуска пользователем программы?

Автор: F.Phoenix 04.11.16, 12:21
Никогда не сталкивался с такой долгой загрузкой DLL, но если процесс из-за них долго грузится, то стоит думать, заставку нужно пихать не в отдельный поток, а в отдельный процесс.

Могу предложить такой вариант:
1. Создать дополнительный проект MyApplicationLoader. При загрузке он отображает лого, потом создает файл loading.tmp (чтоб не мельтешил, ему можно выставить атрибут "скрытый") и вешает на него FileSystemWatcher, после чего запускает основной экзешник программы.
2. Назначить главному окну программы обработчик события Load, в котором удаляется loading.tmp
3. Когда загрузчик обнаруживает удаление файла, он закрывается.

Махинации с файлом можно попробовать заменить перехватом консольного вывода (см. класс System.Diagnostics.Process).

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)