WPF 单例窗口Close()后再Show()会报错,Close会调用Dispose,资源会马上被释放,ShowDialog()的情形是一样的。
重载OnClosing(CancelEventArgs e)方法,使用Hide()方法。
public partial class SingletonWin : Window
{
#region 单件实例
private static SingletonWin _instance;
private static readonly object ObjLok = new object();
private SingletonWin()
{
InitializeComponent();
}
public static SingletonWin Instance()
{
lock (ObjLok)
{
return _instance ?? (_instance = new SingletonWin());
}
}
#endregion
private void CloseBtn_OnClick(object sender, RoutedEventArgs e)
{
Close();
}
/// <summary> 重写Close,窗口关闭时设置为隐藏。
/// </summary>
protected override void OnClosing(CancelEventArgs e)
{
Hide();
e.Cancel = true;
}
}