Hộp thoại cửa sổ WPF được hiển thị bằng cách sử dụng phương pháp ShowDialog trong lớp Window như khi một nút được nhấn trên cửa sổ chính, như thế này.WPF ShowDialog nuốt ngoại lệ trong khi tải cửa sổ
private void button1_Click(object sender, RoutedEventArgs e)
{
try
{
var window = new Window1();
window.ShowDialog();
}
catch (ApplicationException ex)
{
MessageBox.Show("I am not shown.");
}
}
Cửa sổ có một sự kiện Loaded đăng ký trong XAML như thế này:
<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>
Một ngoại lệ được ném vào các sự kiện Window_Loaded
private void Window_Loaded(object sender, RoutedEventArgs e)
{
throw new ApplicationException();
}
Tuy nhiên ngoại trừ không được đánh bắt bởi các bắt xung quanh cuộc gọi ShowDialog, cũng không gọi lại. Ngoại lệ bị nuốt và cửa sổ vẫn hiển thị.
Tại sao điều này xảy ra và tôi sẽ xử lý ngoại lệ trong sự kiện Window_Loaded của cửa sổ WPF như thế nào? Tôi có phải nắm bắt nó trong xử lý sự kiện và Vứt bỏ cửa sổ theo cách thủ công không?
Trong WinForms bạn cần phải gọi Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException)
để cho trường hợp ngoại lệ bong bóng qua ShowDialog gọi. Có một chuyển đổi tương tự mà cần phải được thiết lập trên WPF?
Tôi đã cố gắng tái tạo tình huống của bạn nhưng không thành công. Trường hợp ngoại lệ bị bắt theo cách thông thường. Tôi cho rằng, bạn đã đơn giản hóa mã, nhưng có vẻ như điểm chính là chi tiết. Cung cấp cho họ và tôi sẽ cố gắng giúp đỡ. –
Cảm ơn bạn đã cố gắng tái sản xuất. Tôi đã sao chép vấn đề trong một ví dụ rất đơn giản từ nơi tôi lấy mã nguồn đã đăng. Tôi đang sử dụng VS2010. Tôi sẽ chỉnh sửa câu hỏi của mình và thêm một số thông tin có liên quan để tái tạo. – vidstige