未处理的异常未被处理程序捕获

时间:2017-01-18 18:59:24

标签: c# wpf exception

我们一直在使用未处理的例外情况,我们同时注册AppDomain.CurrentDomain.UnhandledExceptionAllowDrop 但是以下使用Drop Event处理程序的repro情况不会触发任何未处理的异常处理程序。

当我从UI或任务中抛出异常时,会触发一些处理程序,但是形成文档我不理解为什么在我的场景中没有触发处理程序,因为我希望Dispatcher调用DispatcherUnhandledException

这是VS 2015与.net 4.5.2

Repro WPF代码非常简单,只有Drop<Window x:Class="unhandledex_wpf.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525" AllowDrop="True" Drop="MainWindow_OnDrop"> <Grid> </Grid> </Window> 处理程序。注意:处理程序在窗口ctor中注册,在app.xaml.cs中执行此操作时的行为相同。

只需拖动&amp;将任何文件放入其中,应该出现一个消息框,但不会出现。

using System;using System.Threading.Tasks;using System.Windows;

namespace unhandledex_wpf
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            Application.Current.DispatcherUnhandledException += ( sender, args ) => MessageBox.Show( "Exception" );
            AppDomain.CurrentDomain.UnhandledException += ( sender, args ) => MessageBox.Show( "Exception" );
            TaskScheduler.UnobservedTaskException += ( sender, args ) =>  MessageBox.Show( "Exception" );

            // works Task.Run( ( )=> { throw new Exception( "foo" ); } );
        }

        private void MainWindow_OnDrop( object sender, DragEventArgs e )
        {
            throw new NotImplementedException("Catch me");
        }
    }
}

代码背后:

{{1}}

1 个答案:

答案 0 :(得分:1)

如果要在drop事件期间处理异常,则必须在Drop事件处理程序中处理它。有关原因的更多信息,请参阅MSDN论坛以下主题中的Peter Ritchie的回答:https://social.msdn.microsoft.com/Forums/windows/en-US/8beb1aba-1699-46c7-84dc-38768c7a21f6/treeview-dragdrop-event-ignores-exceptions-help?forum=winforms

Jay Wang(MSFT)在WPF论坛中证实了这一点:https://social.msdn.microsoft.com/Forums/vstudio/en-US/a336acc8-5a29-45aa-b84a-8e235a0f838a/wpf-drop-event-hides-thrown-error?forum=wpf