WPF 글로벌 예외 처리 프로그램

4930 단어 c#.netwpfexception
WPF global exception handler [duplicate]
This question already has an answer here: 이 문제는 이미 여기에 답이 있습니다.
  • Globally catch exceptions in a WPF application? WPF 응용 프로그램에서 글로벌 캡처 예외?6 answers 6개 답변
  • Sometimes, under not reproducible circumstances, my WPF application crashes without any message. 때때로 복사할 수 없는 상황에서 나의 WPF 응용 프로그램은 아무런 소식도 없이 붕괴된다.The application simply close instantly. 이 프로그램은 단지 즉시 닫을 뿐이다.
    Where is the best place to implement the global Try/Catch block. 글로벌 Try/Catch 블록을 위한 최적의 위치는 어디입니까?At least I have to implement a messagebox with: "Sorry for the inconvenience ..."적어도 나는 다음과 같은 메시지로 메시지 상자를 실현해야 한다. "당신에게 불편을 끼쳐서 죄송합니다..."

    #1층


    참조:https://stackoom.com/question/6B3y/WPF전역 예외 처리 프로그램

    #2층


    You can handle the AppDomain.UnhandledException 이벤트 처리할 수 있습니다 AppDomain.UnhandledException 이벤트
    EDIT: actually,this event is probably more adequate: Application.DispatcherUnhandledException 편집: 실제로 이 이벤트가 더 적합할 수 있습니다: Application.DispatcherUnhandledException

    #3층


    You can trap unhandled exceptions at different levels: 처리되지 않은 이상을 다른 단계에서 포착할 수 있습니다.
  • AppDomain.CurrentDomain.UnhandledException From all threads in the AppDomain. AppDomain.CurrentDomain.UnhandledExceptionAppDomain.CurrentDomain.UnhandledException 모든 라인에서 온다.
  • Dispatcher.UnhandledException From a single specific UI dispatcher thread. Dispatcher.UnhandledException 개별 UI 스케줄러 스레드에서 가져옵니다.
  • Application.Current.DispatcherUnhandledException From the main UI dispatcher thread in your WPF application. Application.Current.DispatcherUnhandledException WPF 응용 프로그램의 기본 UI 스케줄러 스레드에서 가져옵니다.
  • TaskScheduler.UnobservedTaskException from within each AppDomain that uses a task scheduler for asynchronous operations. 작업 스케줄러를 사용하여 비동기식으로 작업하는 AppDomain당 TaskScheduler.UnobservedTaskException

  • You should consider what level you need to trap unhandled exceptions at. 어떤 단계에서 처리되지 않은 이상을 포착해야 할지 고려해야 합니다.
    Deciding between #2 and #3 depends upon whether you're using more than one WPF thread. #2와 #3 사이의 선택은 여러 WPF 스레드를 사용하느냐에 따라 달라집니다.This is quite an exotic situation and if you're unsure whether you are or not, then it's most likely that you're not. 이것은 매우 특수한 상황입니다. 만약 당신이 자신이 있는지 없는지 확실하지 않다면, 당신은 아닐 가능성이 높습니다.

    # 4층


    토마스의 답을 보충하기 위해 Application류는 당신이 처리할 수 있는 DispatcherUnhandledException 사건도 가지고 있습니다.

    #5층


    위의 게시물 이외에: 상기 직위를 제외하고:
    Application.Current.DispatcherUnhandledException
    

    will not catch exceptions that are thrown from another thread then the main thread. 다른 스레드 (그 다음은 메인 스레드) 에서 발생하는 이상을 포착하지 않습니다.You have to handle those exceptions on its actual Thread. 실제 라인에서 이 이상을 처리해야 합니다.But if you want to Handle them on your global exception handler you can pass it to the main thread: 단, 전역 이상 처리 프로그램에서 처리하려면 메인 라인에 전달할 수 있습니다.
     System.Threading.Thread t = new System.Threading.Thread(() =>
        {
            try
            {
                ...
                //this exception will not be catched by 
                //Application.DispatcherUnhandledException
                throw new Exception("huh..");
                ...
            }
            catch (Exception ex)
            {
                //But we can handle it in the throwing thread
                //and pass it to the main thread wehre Application.
                //DispatcherUnhandledException can handle it
                System.Windows.Application.Current.Dispatcher.Invoke(
                    System.Windows.Threading.DispatcherPriority.Normal,
                    new Action((exc) =>
                        {
                          throw new Exception("Exception from another Thread", exc);
                        }), ex);
            }
        });
    

    #6층


    As mentioned above 아까 말씀드린 대로.
    Application.Current.DispatcherUnhandledException will not catch exceptions that are thrown from another thread then the main thread. Application.Current.DispatcherUnhandledException은 다른 스레드(그 다음 주 스레드)에서 발생하는 이상을 포착하지 않습니다.
    that actual depend on how the thread wascreated 실제 상황은 스레드의 생성 방식에 달려 있습니다
    One case that is not handled by Application.Current.DispatcherUnhandledException is System.Windows.Forms.Timer for which Application.ThreadException can be used to handle these if you run Forms on other threads than the main thread you will need to set Application.ThreadException from each such thread Application.Current.DispatcherUnhandledException이 처리되지 않는 경우 중 하나는 System입니다.Windows.Forms.Timer, 주 스레드를 제외한 다른 스레드에서 Forms를 실행하면 Application을 사용할 수 있습니다.이러한 상황을 처리하려면 ThreadException이 필요합니다. 응용 프로그램을 설정해야 합니다.모든 스레드에서 ThreadException

    좋은 웹페이지 즐겨찾기