1

尝试在 Window 类的析构函数中调用 MessagBox.Show(),但它什么也没做。我的程序中有两个单独的 Window 类,在它们的每个析构函数中我都尝试了这个,即使我关闭一个窗口并让另一个打开,关闭窗口的析构函数中的 MessageBox 也不会显示。

这两个析构函数如下所示:

~MainWindow()
{
    MessageBox.Show("Exit Main Window", "Exit Main Window", MessageBoxButton.OK, MessageBoxImage.Information);
}
4

2 回答 2

1

C# 中的终结器(又名析构函数)不像 C 中的析构函数。它不是在对象实例之后清理的地方。

您应该使用窗口对象中的事件来捕获此类事情。

在实现IDisposable接口的对象中,终结器仅在对象未正确处理时运行。该Dispose方法通常使用该GC.SuppressFinalize方法从终结器队列中删除对象,因此通常根本不调用终结器。清理由Dispose方法完成。

如果调用终结,它是由垃圾收集器运行的单独线程执行的。它不是你的应用程序的主线程,所以你不能在终结器中做任何与 GUI 相关的事情。当对象即将被垃圾收集时,将调用终结器,因此不会在它变得未使用后立即发生,而是在那之后的一段时间。

此外,即使对象未正确处理,也不能保证运行终结器。当应用程序关闭时,垃圾收集器将从终结器队列中的对象运行终结器一段时间,但在特定时间后它会放弃并杀死所有对象而不调用终结器。

于 2013-04-29T17:56:59.783 回答
0

Window Closing尝试在insted 事件中添加此代码。

 private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
 {
    MessageBox.Show("Exit Main Window", "Exit Main Window", MessageBoxButton.OK, MessageBoxImage.Information);
 }
于 2013-04-29T17:45:13.520 回答