系统.InvalidOperationException: 无法设置可见性

3
我创建了一个窗口,只有在你点击窗口外部时才能关闭它。这段代码在这里运行得很好:
 protected override void OnDeactivated(EventArgs e)
 {
     try
     {
         base.OnDeactivated(e);
         Close();
     }
     catch (Exception ex) { Console.WriteLine(ex.ToString()); }
 }

唯一的问题是当窗口关闭时,例如使用alt + f4时,会出现以下异常:

在窗口关闭期间,您不能将Visibility设置为Visible或调用Show、ShowDialog、Close WindowInteropHelper.EnsureHandle。

我该如何确保避免这种情况?实际上,我已经通过 Try/Catch 来处理了该异常。

1个回答

3
在窗口的“Deactivated”事件被触发之前,会发生“Closing”事件(但显然仅在用户有意关闭窗口时才会发生,例如按下“Alt+F4”)这意味着您可以在窗口的“Closing”事件处理程序中设置一个标志,指示当前正在关闭窗口,因此在“Deactivated”事件处理程序中不需要调用“Close()”方法。请注意保留HTML标记。
    private bool _isClosing;

    protected override void OnClosing(CancelEventArgs e)
    {
        base.OnClosing(e);
        _isClosing = true;
    }

    protected override void OnDeactivated(EventArgs e)
    {
        base.OnDeactivated(e);
        if (!_isClosing)
            Close();
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接