检查窗口是否实际关闭的更好方法

时间:2014-04-04 15:27:52

标签: c# wpf windows

我想知道是否有比下面更好的方法来检查窗口是否关闭,或者Closing是否可以解决关闭程序?

我们按照自己的方式行事:

var window = Application.Current.Windows.FirstOrDefault(x => x is FooWindow);
if (window != null)
{
    var gotClosed = false;
    window.Closed += (sender, args) => gotClosed = true;
    window.Close();
    if (gotClosed == false)
    {
        //Close got cancled, by closing...
    }
}

2 个答案:

答案 0 :(得分:2)

从检查.NET源代码,我不太确定IsDisposed是否安全。但是,似乎没有很多安全的选择。到目前为止我一直使用的那个没有问题的是在关闭后检查Visibility Visible属性。

更干净的方法可能是创建自己的类并覆盖OnClosing()OnClosed()但是:

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
    // Fires Closing event
    base.OnClosing(e);

    if (!e.Cancel)
    {
        // Window was allowed to close.
        // Set IsClosed = true or something like that
    }
}

在那里,您可以将结果存储在属性中。例如。

答案 1 :(得分:1)

我不确定它比您的解决方案更好,但在调用window.Close()后,属性IsDisposed变为真。所以,你可以检查一下:

if(window.IsDisposed) { .... }