Welcome

首页 / 软件开发 / .NET编程技术 / [WPF]如何在关闭非模态子窗体时用消息框确认:解决最小化窗体时抛出的异常

[WPF]如何在关闭非模态子窗体时用消息框确认:解决最小化窗体时抛出的异常2012-01-02 博客园 南柯之石又是一个看起来很简单的问题。像下面这样在Closing里弹出个MessageBox确认一下不就行了?

public static void OnWindowClosing(object sender, CancelEventArgs e){  if (MessageBox.Show(string.Format("Are you sure to close the {0}?", (sender as Window).Title),    "Confirm", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.No)  {    e.Cancel = true;  }}
代码简单得不能再简单了,而且试了一下可以达到目的,似乎是没有什么问题啊。但是很多代码需要大量的测试才能发现问题。这个代码就是其中之一。

在说明BUG之前,先给几个信息,大家可以猜猜如何重现这个问题。

1.只有非模态的子窗体有这个BUG。主窗口是没有问题的。

2.弹出MessageBox的时候,UI消息处理线程会被阻塞。

3.抛出的异常,是InvalidOperationException。

4.子窗体与主窗体有从属关系,主窗体最小化时,子窗体也跟着最小化。

5.最后一个信息,已经是把BUG告诉大家了。就是Error Message,如下图所示。

图1. Exception信息