2015-09-06 72 views
2

我创建了一个窗口,只有在其外部单击时才能关闭该窗口。代码工作得非常好位置:System.InvalidOperationException:无法设置可见性

protected override void OnDeactivated(EventArgs e) 
{ 
    try 
    { 
     base.OnDeactivated(e); 
     Close(); 
    } 
    catch (Exception ex) { Console.WriteLine(ex.ToString()); } 
} 

在关闭窗口,例如,用alt + f4唯一的问题就来了,尤其需要此异常:

你不能设置能见度为Visible或者调用Show,ShowDialog,关闭WindowInteropHelper.EnsureHandle或当你关闭窗口时。

我该如何确保避免它?其实我已经成功使用的try/catch异常..

回答

2

窗口的Deactivated事件引发之前,Closing事件发生(但很明显,只有当窗口被用户故意关闭,例如通过按下Alt+F4 )。这意味着你可以设置窗口的Closing事件处理一个标志,指示当前正在关闭的窗口,这意味着Close()方法不需要在Deactivated事件处理函数中调用:

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(); 
    } 
+0

好的解决方案,谢谢:d – Bender