Winform单例模式之牛刀小试

来源:互联网 发布:扫鬼软件下载 编辑:程序博客网 时间:2024/06/16 15:22

今天winform开发时,有一个需求:点击一个button,弹出一个窗体,显示相关信息,此时再点击button,就不再创建窗体,这里有两种方式解决:

  1. 弹出窗体不关闭,无法操作主窗体
  2. 使用单例模式

    这里使用第二种方法:单例模式(详见百度)
    具体代码如下:

public partial class About : Form{    public static About instance { get; set; }    private About()    {        InitializeComponent();    }    public static About GetInstance()    {        if (instance == null)        {            instance = new About();        }        return instance;    }}

调用

About about=About.GetInstance();about.Show();

这样就实现了同时只能打开一个窗体,又能同时操作其他窗体。

But,实际操作之后,会出现这个错误:
无法访问已释放的对象
这是因为在关闭窗体后,这个对象虽然可能还没被GC回收,但是IsDisposed已经被置为true,已经被视为释放了,这就造成无法访问。
这时可以通过监听Disposed事件来重新分配对象内存。

代码:

public partial class About : Form{    public static About instance { get; set; }    private About()    {        InitializeComponent();    }    public static About GetInstance()    {        if (instance == null)        {            instance = new About();        }        instance.Disposed+=new EventHandler(instance_Disposed);        return instance;    }    static void instance_Disposed(object sender,EventArgs e)    {        instance = null;    }}
0 0
原创粉丝点击