экран-заставка с состоянием загрузки в сборе - PullRequest
2 голосов
/ 01 января 2009

Я пытаюсь создать заставку, которая показывает состояние загрузки сборок (все ссылки на библиотеки). Я использую делегат AppDomain.AssemblyLoad AssemblyLoadEventHandler, чтобы узнать, какая сборка загружается, но проблема в том, что событие не запускается при инициализации программы. Я попытался зарегистрировать обработчик событий при запуске приложения "MyApplication_Startup", но это не сработало. Вот мой тестовый код:

    Partial Friend Class MyApplication

    Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
        AddHandler AppDomain.CurrentDomain.AssemblyLoad, AddressOf MyAssemblyLoadEventHandler
    End Sub

    Sub MyAssemblyLoadEventHandler(ByVal sender As Object, ByVal args As AssemblyLoadEventArgs)
        Console.WriteLine(">>> ASSEMBLY LOADED: " + args.LoadedAssembly.FullName)
        Console.WriteLine()
    End Sub

End Class

Ответы [ 2 ]

1 голос
/ 02 января 2009

Одна из проблем, с которыми вы столкнетесь, заключается в том, что сборки в .Net не загружаются до тех пор, пока они не потребуются.

Например, создайте новую сборку с классом «Hello World», свяжите ее с любым исполняемым файлом, затем удалите новую сборку из рабочего каталога, и вы никогда не заметите, что она загружена.

Затем, при событии нажатия кнопки, инициализируйте класс «Hello World», оставьте сборку удаленной из рабочего каталога, и вы получите сообщение об ошибке, что сборка не может быть найдена при нажатии кнопки.

Это основная причина того, что первый доступ к базе данных обычно медленен в .Net, и у него возникает ощущение «ускорения» (чем больше вы его используете, тем быстрее это происходит), потому что объекты, которые вы используете в своем слой данных не загружается в среду выполнения до тех пор, пока к ним не будет получен доступ.

0 голосов
/ 01 января 2009

Хм, я не уверен насчет синтаксиса VB, но в C # я бы поместил его в Основное (...) программы:

static void Main(string[] args)
{
    AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(CurrentDomain_AssemblyLoad);
}

static void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
{
    Console.WriteLine("Loaded " + args.LoadedAssembly.FullName);
}

ОБНОВЛЕНИЕ: При использовании Reflector синтаксис VB выглядит следующим образом:

Private Shared Sub Main(ByVal args As String())
    AddHandler AppDomain.CurrentDomain.AssemblyLoad, New AssemblyLoadEventHandler(AddressOf Program.CurrentDomain_AssemblyLoad)
End Sub

Private Shared Sub CurrentDomain_AssemblyLoad(ByVal sender As Object, ByVal args As AssemblyLoadEventArgs)
    Console.WriteLine(("Loaded " & args.LoadedAssembly.FullName))
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...