Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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# 调度程序未引发未处理的异常事件_C#_Wpf_Exception_Exception Handling_Dispatcher - Fatal编程技术网

C# 调度程序未引发未处理的异常事件

C# 调度程序未引发未处理的异常事件,c#,wpf,exception,exception-handling,dispatcher,C#,Wpf,Exception,Exception Handling,Dispatcher,我的情况是,调度器不会引发UnhandledException事件,也不会引发UnhandledExceptionFilter事件 但据我所知,当我在Invoke中遇到异常时,它应该会引发这些事件 这是我的最小无效示例: [Test] public void Should_raise_unhandled_exception_event() { var control = new Canvas(); var window = new Window { Content = contr

我的情况是,调度器不会引发
UnhandledException
事件,也不会引发
UnhandledExceptionFilter
事件

但据我所知,当我在
Invoke
中遇到异常时,它应该会引发这些事件

这是我的最小无效示例:

[Test]
public void Should_raise_unhandled_exception_event()
{
    var control = new Canvas();
    var window = new Window { Content = control };
    window.Show();
    control.Dispatcher.UnhandledExceptionFilter += (s, e) =>
    {
        Debug.WriteLine("filter unhandled exception");
        Debug.WriteLine("e.RequestCatch: {0}", e.RequestCatch);
    };
    control.Dispatcher.UnhandledException += (s, e) =>
    {
        Debug.WriteLine("unhandled exception: {0}", e.Exception);
        e.Handled = true;
    };
    control.Dispatcher.Invoke(() => { throw new ArgumentOutOfRangeException(); });
    window.Close();
}
我的事件处理程序都没有被调用。
我不明白为什么。有人能解释一下吗?

如果调用
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException),会发生什么情况在测试方法开始时?这来自
表单
-命名空间。我有一个WPF应用程序。为什么要使用
control.Dispatcher
而不是
Application.Current.Dispatcher
?因为我在进行单元测试。在实际应用中,它们是相同的实例。所以我用哪一个都不重要。那个文档非常不准确。不,当您使用Invoke时,异常会被封送回调用它的线程。这将永远不会导致引发未处理的异常事件,线程错误。当您使用BeginInvoke时,将在UI线程上引发异常,并且您将获得该事件。无法使用单元测试模拟此行为,需要Application.Run()。如果调用
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException),会发生什么情况在测试方法开始时?这来自
表单
-命名空间。我有一个WPF应用程序。为什么要使用
control.Dispatcher
而不是
Application.Current.Dispatcher
?因为我在进行单元测试。在实际应用中,它们是相同的实例。所以我用哪一个都不重要。那个文档非常不准确。不,当您使用Invoke时,异常会被封送回调用它的线程。这将永远不会导致引发未处理的异常事件,线程错误。当您使用BeginInvoke时,将在UI线程上引发异常,并且您将获得该事件。无法使用单元测试模拟此行为,需要Application.Run()。