2017-11-10 16 views
1

플러그인을 통해 확장 가능한 응용 프로그램을 개발하고 있습니다. 플러그인 인스턴스가 필요한 경우 Activator.CreateInstance를 사용하여 인스턴스를 만듭니다.Activator.CreateInstance로 만든 플러그인 인스턴스의 함수에 의해 생성 된 예외를 처리합니다.

아래 코드에서 pluginInst는 Activator.CreateInstance로 만든 테스트 플러그인의 인스턴스이고 testException()은 단순히 예외를 throw하는 플러그인 함수입니다.

Try 
    pluginInst.testException() 
Catch ex As Exception 
    Console.WriteLine("plugin exception generated") 
End Try 

메시지는 Visual Studio의 출력 창에 나타나지 않으며, catch에 중단 점을 넣으면 절대로 표시되지 않습니다. 플러그인 인스턴스가 충돌하지만 기본 응용 프로그램은 계속 정상적으로 실행됩니다. 내가 기본 응용 프로그램에서이 같은 플러그인 예외를 처리 할 수있는 방법

testPlugin.dll

에서 'System.Exception': 내가 볼 수있는 유일한 것은이 비주얼 스튜디오의 출력 창

Eccezione의 generata에 메시지인가? 내가 뭘 잘못하고있어?

답변

0

내 문제가 해결되었습니다. 보고 된대로 here

SystemEvents 클래스는 잘못된 스레드에서 이벤트를 발생시킵니다. 어떤 프로그램에서 초기화 문제로 인해 발생합니다. 일반적인 트리거는 SystemEvents를 혼돈시키는 메인 스레드에 첫 번째 창을 생성하지 않습니다. 같은 스레드에서 이벤트를 다시 시작하려고 시도하지만 더 이상 발생하지 않습니다.

내 경우 예외는 기본 응용 프로그램 양식의로드 이벤트에서 호출 된 플러그인 초기화에서 생성되었습니다. 이 단계에서는 처리되지 않은 예외에 대한 올바른 스레드가 아직 생성되지 않은 것으로 보입니다. 따라서 예외는 어디에도 없습니다. 이 경우에는 응용 프로그램을 종료해도 여전히 실행되고있는 경우가 있는데, 제 경우에는 fpushmessageloop 유형의 교수형 스레드 (예외를 생성하는 스레드)가 응용 프로그램의 종료를 막고 있다고 볼 수 있습니다.

필자의 경우 플러그인 초기화를 애플리케이션 메인 폼의 표시된 이벤트로 옮기면 문제를 해결하기에 충분했다.