Winform单例模式之牛刀小试

    xiaoxiao2021-03-25  117

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

    弹出窗体不关闭,无法操作主窗体

    使用单例模式

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

    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; } }
    转载请注明原文地址: https://ju.6miu.com/read-12881.html

    最新回复(0)