Una finestra di dialogo della finestra WPF viene mostrata utilizzando il metodo ShowDialog nella classe Window come quando viene premuto un pulsante nella finestra principale, in questo modo.WPF ShowDialog durante l'inceppamento delle eccezioni durante il caricamento della finestra
private void button1_Click(object sender, RoutedEventArgs e)
{
try
{
var window = new Window1();
window.ShowDialog();
}
catch (ApplicationException ex)
{
MessageBox.Show("I am not shown.");
}
}
la finestra ha un evento Loaded sottoscritto nel codice XAML in questo modo:
<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>
viene generata un'eccezione in caso Window_Loaded
private void Window_Loaded(object sender, RoutedEventArgs e)
{
throw new ApplicationException();
}
Tuttavia l'eccezione non viene catturato dal aggirare la chiamata ShowDialog, né la chiamata restituisce. L'eccezione viene inghiottita e la finestra viene comunque visualizzata.
Perché si verifica questo problema e come gestirò un'eccezione nell'evento Window_Loaded di una finestra WPF? Devo prenderlo nel gestore dell'evento e Smaltire la finestra manualmente?
In WinForms è necessario chiamare Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException)
al fine di permettere eccezioni bolla attraverso ShowDialog chiama. C'è un interruttore simile che deve essere impostato su WPF?
ho cercato di riprodurre la vostra situazione, ma senza successo. Le eccezioni sono catturate nel modo usuale. Suppongo che tu abbia il codice semplificato, ma sembra che il punto principale sia nei dettagli. Forniteli e cercherò di aiutare. –
Grazie per aver provato a riprodurlo. Ho riprodotto il problema in un esempio molto semplice da dove ho preso il codice sorgente pubblicato. Sto usando VS2010. Modificherò la mia domanda e aggiungerò alcune informazioni rilevanti per la riproduzione. – vidstige