为什么App.DispatcherUnhandledException处理程序无法捕获App构造函数引发的异常?

时间:2020-01-23 10:12:59

标签: c# wpf exception

请查看以下代码:

public partial class App : Application
{
        public App():base()
        {
                this.DispatcherUnhandledException += App_DispatcherUnhandledException;
                throw new InvalidOperationException("exception");
        }

        private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
        {
                MessageBox.Show(e.Exception.Message);
                e.Handled = true;
        }
}

为什么处理程序无法捕获App构造函数引发的异常?

3 个答案:

答案 0 :(得分:0)

我已经用这种方法来做同样的事情。

delete_cookie = function(name){
    document.cookie = name+'=;expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/;';
};
delete_cookie('ck');

答案 1 :(得分:0)

App实例无法构建,因此Application.Current没有任何意义。您应该订阅AppDomain.CurrentDomain.UnhandledException

public App() : base()
{
    AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
    throw new InvalidOperationException("exception");
}

private void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    MessageBox.Show(e.ExceptionObject.ToString());
}

答案 2 :(得分:0)

为什么处理程序无法捕获App构造函数引发的异常?

仅因为在构建App之前没有调度程序在运行。

这是编译器为您生成的Main方法:

[STAThread]
static void Main(string[] args)
{
    App application = new App(); //<-- your throw here
    application.InitializeComponent();
    application.Run(); //<-- and there is no dispatcher until here
}

来自docs

调用Run时,Application将新的Dispatcher实例附加到UI线程。接下来,调用Dispatcher对象的Run方法,这将启动消息泵以处理Windows消息。

您不能在实际创建Run对象之前调用App