Winform单例模式之牛刀小试

今天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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值