未処理の例外が使用されており、Application.Current.DispatcherUnhandledException
とAppDomain.CurrentDomain.UnhandledException
の両方を登録しますが、未処理の例外ハンドラはトリガされません。 未処理の例外はハンドラによってキャッチされません
私は、いくつかのハンドラがトリガされますUIまたはタスクから例外を投げるが、私は
DispatcherUnhandledException
を呼び出すディスパッチャを期待する、以下のようにハンドラが私のシナリオでトリガされていない理由を私は理解していない文書を形成 これはVS 2015と.net 4.5.2Repro 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");
}
}
}