로드 어셈블리 상태가있는 스플래시 화면
-
03-07-2019 - |
문제
어셈블리 (모든 참조 라이브러리) 로딩 상태를 보여주는 스플래시 화면을 만들려고합니다. 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
제휴하지 않습니다 StackOverflow