문제

어셈블리 (모든 참조 라이브러리) 로딩 상태를 보여주는 스플래시 화면을 만들려고합니다. 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
도움이 되었습니까?

해결책

.NET의 어셈블리가 필요할 때까지로드되지 않는다는 것입니다.

예를 들어, "Hello World"클래스가 포함 된 새 어셈블리를 작성하고 실행 파일로 참조 한 다음 작업 디렉토리에서 새 어셈블리를 삭제하십시오.

다음으로 버튼 클릭 이벤트에서 "Hello World"클래스를 초기화하고 작업 디렉토리에서 어셈블리를 삭제하면 버튼을 클릭 할 때 어셈블리를 찾을 수없는 오류가 수신됩니다.

이것이 첫 번째 데이터베이스 액세스가 일반적으로 .NET에서 느리고 "속도 업"느낌이 느려지는 주요 이유입니다. (더 많이 사용하면 더 많이 사용하면 더 빨리 얻을 수 있습니다). 즉, 데이터 계층에 사용하는 객체가 액세스 할 때까지 런타임에로드되지 않습니다.

다른 팁

흠 나는 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);
}

업데이트: 반사기를 사용하여 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top