我已经在WPF中为窗口创建了一个Singleton对象。
public static Test DefInstance
{
get
{
if (formDefInstance == null) // formDefInstance.IsDisposed
{
initializingDefInstance = true;
formDefInstance = new cas18();
initializingDefInstance = false;
}
return formDefInstance;
}
set { formDefInstance = value; }
}
但是forDefInstance.IsDisposed
无效并抛出错误。
关于这个的任何想法?
答案 0 :(得分:0)
我不知道这是不是你想做什么,但它对我有用:
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();
然后,只显示一个窗口,您使用窗口的一个实例。
答案 1 :(得分:0)
我想每个人都应该看看Jon Skeet的C#In Depth网站。如果只是为了阅读并永久地焚烧他们的大脑单身模式a-la 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>
个实现和该模式的各种其他实现。
答案 2 :(得分:-2)
您可以通过实施以下方法来实现这一目标
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;
}
}