2010-01-11 3 views
0

여기 내 컨텍스트 :추가 기능 dll에 전역 예외 처리를 추가하는 방법은 무엇입니까?

  • 응용 프로그램 용 WPF 추가 기능을 작성하고 있습니다.
  • 이 응용 프로그램의 주 스레드는 관리되지 않습니다.
  • 처리되지 않은 예외를 처리하기 위해이 추가 기능에 대한 전역 예외 처리 시스템을 추가하려고합니다.

는 여기에 내가 시도했지만 작동하지 않는 한 작업은 다음과 같습니다

  • 내 Application.Run() 코드 라인에 try-catch 블록을 추가 할 수 없습니다. 내가 애드 인 (add-in)이기 때문에 코드 조각이 응용 프로그램에 있습니다.
  • System.Windows.Forms.Application.ThreadException도 작동하지 않습니다. WinForm 응용 프로그램이 없을 수도 있습니다. (비 관리 코드의 WPF 호스팅)
  • AppDomain.CurrentDomain.UnhandledException도 작동하지 않습니다. 어쩌면 응용 프로그램 자체에서 처리하기 때문일 수 있습니다. 그것은 단지 내 코드를 입력하지 않습니다. 그래서

,이 상황에 대한 어떤 아이디어?

답변

0

추가 기능을 작성하고 전역 예외 처리에 연결하면 추가 기능의 동작뿐만 아니라 주 응용 프로그램과 다른 모든 추가 기능도 변경됩니다 시스템에서 - 다른 추가 기능에 버그가 생길 수있는 무언가를하면 좋은 이웃이되지 못합니다. :-)

자, 이제 추가 기능에서 호출 할 수있는 모든 메소드를 try -catch 블록은 분명히 유지할 수 없지만 PostSharp와 같은 AOP 시스템은 처리 코드를 멋진 중앙 위치에 유지하면서 쉽게 추가 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 당신 말이 맞아,이 응용 프로그램에 대한 전역 예외 처리를 추가해서는 안됩니다. 그러나 "글로벌"예외 처리 시스템을 내 추가 기능 영역에만 추가 할 수있는 방법이 있습니다. 추가 기능에 의해 예외가 발생하면이 시스템으로 이동합니다. 추가 기능의 GUI에 일련의 동작이 있기 때문에 try-catch 블록을 내 항목에만 추가하면 충분하지 않습니다. 다시 한 번 고맙습니다. – redjackwong

+0

PostSharp를 사용하면 속성, 변환기, 동작 및 사용자/사용자 정의 컨트롤의 코드까지 모든 코드에 try-catch와 유사한 동작을 자동으로 추가 할 수 있으므로 대부분의 경우를 다루어야하므로 예외가 발생했을 때 좋은 해결책이 없습니다 다른 사람의 코드에 의해 GUI 내부 – Nir

-1
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
관련 문제