我们如何为Window创建Singleton实例?
我已经搜索过在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
不起作用并抛出错误。
关于这个的任何想法?
我想每个人都应该看看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
实现以及该站点中模式的各种其他实现。
我不知道这是不是你想做什么,但它对我有用:
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; } }