Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的异常对wpf应用程序没有任何影响?_C#_Wpf_Exception Handling_Event Handling_Backgroundworker - Fatal编程技术网

C# 为什么我的异常对wpf应用程序没有任何影响?

C# 为什么我的异常对wpf应用程序没有任何影响?,c#,wpf,exception-handling,event-handling,backgroundworker,C#,Wpf,Exception Handling,Event Handling,Backgroundworker,我有一个WPF应用程序,它有一个BackgroundWorker。我在这个BGW中抛出了一个异常,但它没有显示在任何地方!,只有后台工作进程触发其WorkerFinished事件 它要去哪里?每个线程都有自己的调用堆栈;异常只能向上移动它们自己的调用堆栈,它们无法“出血”到另一个线程的调用堆栈中 当异常冒泡到启动DoWork事件处理程序的BackgroundWorker代码时,异常将被显式捕获并存储在Error属性中,而不是允许它到达调用堆栈的顶部并使应用程序崩溃 如果希望程序在BGW引发异常时

我有一个WPF应用程序,它有一个
BackgroundWorker
。我在这个BGW中抛出了一个异常,但它没有显示在任何地方!,只有后台工作进程触发其
WorkerFinished
事件


它要去哪里?

每个线程都有自己的调用堆栈;异常只能向上移动它们自己的调用堆栈,它们无法“出血”到另一个线程的调用堆栈中

当异常冒泡到启动
DoWork
事件处理程序的BackgroundWorker代码时,异常将被显式捕获并存储在
Error
属性中,而不是允许它到达调用堆栈的顶部并使应用程序崩溃


如果希望程序在BGW引发异常时结束,则需要处理已完成的事件,检查异常,然后重新引发或引发新异常。

看这里,有一个很好的示例。中的异常在RunWorkercompleted中大量出现


BackgroundWorker
上的MSDN条目中:“如果操作引发代码未处理的异常,BackgroundWorker将捕获该异常并将其传递到RunWorkerCompleted事件处理程序,在该处理程序中,该异常作为System.ComponentModel.RunWorkerCompletedEventArgs的错误属性公开。”与WPF无关。读一读,这是值得花的时间!后台线程中的异常也会使应用程序崩溃,在这种情况下,BackgroundWorker类被设计为在抛出异常时不会使应用程序崩溃。
var worker = new BackgroundWorker();
worker.DoWork += (sender, e) => 
    { 
        throw new InvalidOperationException("oh shiznit!"); 
    };
worker.RunWorkerCompleted += (sender, e) =>
    {
        if(e.Error != null)
        {
            MessageBox.Show("There was an error! " + e.Error.ToString());
        }
    };
worker.RunWorkerAsync();