我们如何为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; } }