Okno dialogowe okna WPF jest pokazane za pomocą metody ShowDialog w klasie okna, jak w przypadku naciśnięcia przycisku w oknie głównym, jak to.WPF ShowDialog przełykanie wyjątki podczas obciążenia okna
private void button1_Click(object sender, RoutedEventArgs e)
{
try
{
var window = new Window1();
window.ShowDialog();
}
catch (ApplicationException ex)
{
MessageBox.Show("I am not shown.");
}
}
Okno ma załadowaną zdarzenie subskrybowanego w XAML tak:
<Window x:Class="Stackoverflow.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Loaded="Window_Loaded">
<Grid />
</Window>
jest wyjątek w przypadku Window_Loaded
private void Window_Loaded(object sender, RoutedEventArgs e)
{
throw new ApplicationException();
}
jednak wyjątek nie jest catched przez złapać wokół wywołania ShowDialog, ani nie zwraca połączenia. Wyjątek jest połknięty, a okno nadal wyświetlane.
Dlaczego tak się dzieje i jak mam poradzić sobie z wyjątkiem w zdarzeniu Window_Loaded w oknie WPF? Czy muszę go przechwycić w module obsługi zdarzenia i ręcznie usunąć okno?
W WinForms trzeba zadzwonić Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException)
aby pozwolić wyjątków bańki poprzez zwraca ShowDialog. Czy istnieje podobny przełącznik, który należy ustawić w WPF?
Starałem się odtworzyć sytuację, ale bez powodzenia. Wyjątki są łapane w zwykły sposób. Przypuszczam, że masz uproszczony kod, ale wydaje się, że główny punkt jest w szczegółach. Zapewnij je, a ja postaram się pomóc. –
Dzięki za próbę rozmnażania. Powieliłem problem na bardzo prostym przykładzie z miejsca, w którym wziąłem opublikowany kod źródłowy. Im przy użyciu VS2010. Będę edytować moje pytanie i dodać kilka istotnych informacji do odtworzenia. – vidstige