C# 我有一个单例表单名FCD无法访问已处理对象的问题。对象名称:';FCD'';
这里的代码错误这是另一个表单内容 FCD表单的按钮C# 我有一个单例表单名FCD无法访问已处理对象的问题。对象名称:';FCD'';,c#,winforms,C#,Winforms,这里的代码错误这是另一个表单内容 FCD表单的按钮 private void Button1_Click(object sender, EventArgs e) { f = FCD.getInstance(); f.Show(); } 而FDC类是 public partial class FCD : Form { private static FCD instance=null; private FCD()
private void Button1_Click(object sender, EventArgs e)
{
f = FCD.getInstance();
f.Show();
}
而FDC类是
public partial class FCD : Form
{
private static FCD instance=null;
private FCD()
{
InitializeComponent();
load();
}
public static FCD getInstance()
{
if(instance == null)
{
instance = new FCD();
}
return instance;
}
问题是,当我第一次执行fcd表单时,当我关闭它时,它会工作。我再试一次,他们给了我这个问题,所以在一次大讨论后,我找到了这个解决方案
private void Button1_Click(object sender, EventArgs e)
{
if(f!=null)
if (f.IsDisposed)
{
FCD.setInstanceNull();
}
f = FCD.getInstance();
f.Show();
}
我添加了一个方法,如果表单关闭,它将instance=null
public static void setInstanceNull()
{
instance = null;
}
检查实例
是否已显示
。请尝试以下操作:
更改自:
public static FCD getInstance()
{
if(instance == null)
{
instance = new FCD();
}
return instance;
}
public static FCD getInstance()
{
if(instance == null || instance.IsDisposed)
{
instance = new FCD();
}
return instance;
}
至:
public static FCD getInstance()
{
if(instance == null)
{
instance = new FCD();
}
return instance;
}
public static FCD getInstance()
{
if(instance == null || instance.IsDisposed)
{
instance = new FCD();
}
return instance;
}
我认为您必须覆盖关闭事件并隐藏表单,而不是实际关闭它。处理表单的是关闭操作两件事1)表单中的静态方法没有多大意义,因为除非捕获关闭事件,否则退出时表单将进行处理2)再次在静态方法中调用新FCD没有多大意义。请参阅我的两个表单解决方案:当
FCD
的静态实例关闭时,它需要将instance
设置为null
。当表单关闭时,将instance
设置为null
将撤消单例模式。无论如何,为什么这里需要一个单例呢?在我给你的链接中讨论的事件中,你是否尝试过将instance
设置为null
?让单例的调用者担心这种事情是非常奇怪的(这就是为什么我建议这样做的原因)。