如何为一个窗口创建一个单例实例?
本文关键字:一个 单例 实例 创建 窗口 | 更新日期: 2023-09-27 18:09:31
我已经搜索了在WPF中创建一个窗口的单例对象。
public static Test DefInstance
{
get
{
if (formDefInstance == null) // formDefInstance.IsDisposed
{
initializingDefInstance = true;
formDefInstance = new cas18();
initializingDefInstance = false;
}
return formDefInstance;
}
set { formDefInstance = value; }
}
但是forDefInstance.IsDisposed
不工作并抛出错误。
关于这个有什么想法吗?
我认为每个人都应该看看Jon Skeet的c# In Depth网站。如果只是为了阅读和永久地将c#的单例模式烙进他们的大脑。
http://csharpindepth.com/Articles/General/Singleton.aspx在您的场景中,尝试实现这个(线程安全,非惰性):
public sealed class DefInstance
{
private static readonly DefInstance instance = new DefInstance();
static DefInstance()
{
}
private DefInstance()
{
}
public static DefInstance Instance
{
get
{
return instance;
}
}
}
在该站点中还有Lazy<T>
实现和该模式的各种其他实现。
我不知道这是不是你想做的,但它对我有用:
private static MyWindow _defInstance;
public static MyWindow DefInstance
{
get
{
if (null == _defInstance)
{
_defInstance = new MyWindow();
}
return _defInstance;
}
}
在MyWindow代码中:
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
this.Visibility = Visibility.Hidden;
e.Cancel = true;
}
使用它:
DefInstance.Show();
然后,只显示一个窗口,您使用您的窗口的一个实例。
您可以通过实现以下方法
来实现这一点private static volatile DefInstance instance;
private static object syncRoot = new Object();
private DefInstance() {}
public static DefInstance Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new DefInstance();
}
}
return instance;
}
}