C#窗体释放问题

chen_xiangguo 2009-07-06 07:35:29
情况:我使用单例模式,使同一时刻只能有一个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”。"
--------------------------------------------------------------------------------------------------------------
求大侠门指教.

...全文
107 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hide1984 2009-07-07
  • 打赏
  • 举报
回复
5楼正解~
czw5305302 2009-07-07
  • 打赏
  • 举报
回复
public static DgvForm Instance
{
get {
if (instance == null || instance.IsDisposed)
instance = new DgvForm();
return instance;
}
}
chen_xiangguo 2009-07-07
  • 打赏
  • 举报
回复
那么正确 的应该是怎么样呢
huajia136651 2009-07-06
  • 打赏
  • 举报
回复
因为你把窗口叉掉的时候,程序自动调用了DgvForm 类里dispose函数了,这要实例当然已经被释放掉了,这样你再使用释放了的实例肯定会报错了的
li45214521 2009-07-06
  • 打赏
  • 举报
回复
很明显

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧