2017-03-24 2 views
0

레거시 시스템을 통합하고 DLL을 호출하여 API에 액세스해야합니다. 현재 API를 호출 할 수있는 다른 방법은 없습니다.WPF의 외부 DLL에서 임베디드 브라우저 404 오류 처리

그리고 DLL 쇼는 파일을 찾을 수없는 오류가 발생하는 스플래시 화면을 표시하려고합니다.

DotPeek이 API의 DLL을 디 컴파일 할 수 없으므로 추측이지만 샘플 솔루션에서이 동작을 복제 할 수있었습니다.

해결책.

enter image description here

오류 메시지.

enter image description here

응용 프로그램 코드입니다.

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 

     var dll = Assembly.LoadFile(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WpfLibrary.dll")); 
     var type = dll.GetType("WpfLibrary.TestWindow"); 
     var instance = Activator.CreateInstance(type); 
     object[] parameters = { }; 
     instance.GetType().InvokeMember("Start2", BindingFlags.InvokeMethod, null, instance, parameters); 
    } 
} 

DLL 코드.

public partial class TestWindow : Window 
{ 
    public TestWindow() 
    { 
     InitializeComponent(); 
    } 

    public void Start2() 
    { 
     Show(); 
     WebBrowser.Navigate(new Uri("file:///C:/aaaa.txt")); 
    } 
} 

간단한 해결책은 그러나 나는 더 나은 솔루션을 필요는 WPF 응용 프로그램이 설치되는 모든 컴퓨터에 파일을 만들 수 없습니다, 누락 된 파일을 만드는 것입니다.

내 질문에 어떻게 처리 할 수 ​​/ 외부 DLL에서 오는 이러한 오류 잡을 수 있습니까? 오류 메시지 상자가 표시되는 것을 막을 수 있다면 충분할 것입니다.

답변

0

가장 쉬운 방법은 코드를 try catch 절에 넣는 것입니다. 당신은 작동하지 않습니다이 codesnippet

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomainUnhandledException); 
+0

을 시도 할 수

try { var dll = Assembly.LoadFile(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WpfLibrary.dll")); var type = dll.GetType("WpfLibrary.TestWindow"); var instance = Activator.CreateInstance(type); object[] parameters = { }; instance.GetType().InvokeMember("Start2", BindingFlags.InvokeMethod, null, instance, parameters); } catch(Exception exception) { //handle exception } 

/편집. 필자의 경우 WebBrowser 컨트롤은 예외를 throw하지 않습니다. – Ignas

+0

흠, 좋아. 그리고 당신은 원하지 않거나 파일이 존재하는지 확인하고 추측 할 수있는 dll에 예외를 던질 수 있습니다. –

+0

그러나 나는 그 DLL에 대한 통제권이 전혀 없다 ... 컴파일 된 바이너리를 받았다. – Ignas