none
WPF程序DispatcherUnhandledException使用问题 RRS feed

  • 问题

  • 我创建了一个WPF的工程,工程结构大体是这样的:有一个用于启动的程序集Launcher, 启动程序集在经过一些初始化工作之后通过反射机制调用了程序集A中的某一个form并启动。

    我为这个WPF程序添加了一个DispatcherUnhandledException,大致如下:

            internal static void UnhandledExceptionHandler(object sender, DispatcherUnhandledExceptionEventArgs args)
            {
                MessageBox.Show("Error");
                args.Handled = true;
            }

     

    Launcher程序的Main方法大致如下:
            [STAThread]
            static void Main()
            {
                Application app = new Application();
                //获取到程序集A中的窗口的type: a,省略....
                Window from1 = (Window)Activator.CreateInstance(a);
               
                Application.Current.DispatcherUnhandledException += UnhandledExceptionHandler;
               
                app.Run(from1);
            }

     

    通过这个Main方法我将程序集A中的某个窗口显示出来,但是当这个窗口抛出未处理异常的时候,UnhandledExceptionHandler方法捕获到了错误,并且也成功的弹出了MessageBox消息框,却在弹出消息之后结束了整个程序。

     

    我尝试了改写Main方法:

            [STAThread]
            static void Main()
            {
                Window from1 = new Window1();
                Application app = new Application();
                Application.Current.DispatcherUnhandledException += UnhandledExceptionHandler;
                app.Run(from1);
            }

    即直接调用Launcher程序集中的某个窗口并显示,这样当这个异常被捕获之后,程序在弹出消息框之后并不会退出。

     

    请问为何会出现这个问题,如何解决。

    2011年5月6日 3:34

答案