Мы использовали неиспользуемые исключения для возрастов, и мы регистрируем как Application.Current.DispatcherUnhandledException
, так и AppDomain.CurrentDomain.UnhandledException
, но следующий пример воспроизведения с использованием обработчика Drop Event не вызывает никакого обработанного обработчика исключений.Необработанное исключение, не пойманное обработчиком
Когда я бросаю исключение из пользовательского интерфейса или задач, какой-то обработчик будет запускаться, но формировать документацию не понять, почему обработчик не срабатывают в моем сценарии ниже, как я ожидал бы диспетчер вызова DispatcherUnhandledException
Это VS 2015 с .net 4.5.2
Repro Код WPF очень прост, только AllowDrop
и Drop
обработчик. Примечание. Обработчики регистрируются в окне ctor, такое же поведение при выполнении этого в app.xaml.cs.
Просто перетащите & вставьте в него любой файл, появится окно с сообщением, но оно не отображается.
<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>
код позади:
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");
}
}
}