情况:我使用单例模式,使同一时刻只能有一个DgvForm窗体实例运行
以下是DgvForm中的关键代码: public partial class DgvForm : Form
    {
 private static DgvForm instance=null;        public static DgvForm Instance
        {
            get {
                if (instance == null)
                    instance = new DgvForm();
                return instance;
                }
        }
}调用时使用 private void btnDgv_Click(object sender, EventArgs e) { DgvForm.Instance.Show(); DgvForm.Instance.BringToFront(); }这样可以使同一时刻只有一个DgvForm实例在运行
我试了几次,发现一个问题:
点击btnDgv_Click一次,显示出DgvForm窗体,没有问题
再次点击btnDgv_Click一次,显示出刚才的DgvForm窗体,没有问题
把DgvForm事例关闭,再次点击btnDgv_Click,出错!
以下是错误信息:
--------------------------------------------------------------------------------------------------------------
未处理 System.ObjectDisposedException
  Message="无法访问已释放的对象。\r\n对象名:“DgvForm”。"
--------------------------------------------------------------------------------------------------------------
求大侠门指教.

解决方案 »

  1.   

    因为你把窗口叉掉的时候,程序自动调用了DgvForm 类里dispose函数了,这要实例当然已经被释放掉了,这样你再使用释放了的实例肯定会报错了的
      

  2.   

    public static DgvForm Instance
            {
                get {
                    if (instance == null || instance.IsDisposed)
                        instance = new DgvForm();
                    return instance;
                    }
            }