C# Form.Show():无法访问已释放的对象
我已经被这个问题困扰了一段时间了。我无法在单击按钮时打开新表单。 如果我在start form构造函数中创建并C# Form.Show():无法访问已释放的对象,c#,winforms,C#,Winforms,我已经被这个问题困扰了一段时间了。我无法在单击按钮时打开新表单。 如果我在start form构造函数中创建并.Show()表单,我将工作。我不明白-( 启动形式 public Form1() { InitializeComponent(); startmessage(); br = Logic.loadXML("theshiiiiiittt.xml"); br2 = br.Clone(); loadboxe
.Show()
表单,我将工作。我不明白-(
启动形式
public Form1()
{
InitializeComponent();
startmessage();
br = Logic.loadXML("theshiiiiiittt.xml");
br2 = br.Clone();
loadboxes();
//serializeTest();
t = new Thread(contactDBUpdate);
//t.IsBackground = true;
t.Start();
}
按钮事件:
private void resultButton_Click(object sender, EventArgs e)
{
ResultForm rf = new ResultForm(this);
rf.Show();
this.Enabled = false;
}
希望这就足够了。问题是表单对象失去了作用域,被丢弃了。 如果要保持对话框打开,请使用
Form.ShowDialog()
试试这个:
private void resultButton_Click(object sender, EventArgs e)
{
using(ResultForm rf = new ResultForm(this))
{
rf.ShowDialog();
}
this.Enabled = false;
}
发现我的代码有问题。
我又看了一眼堆栈跟踪,发现一条消息“Icon”
Startupform有这样一行
此代码修复了我的问题:
private void resultButton_Click(object sender, EventArgs e)
{
ResultForm rf = new ResultForm(this);
rf.Icon = this.Icon;
rf.Show();
this.Enabled = false;
}
谢谢你的帮助…在我的例子中,这是因为我想让我的表单成为非模态的。所以我将它们从
form.ShowDialog(parentForm)
更改为form.Show()
但是,如果我第二次尝试显示一个表单,因为代码中的某个地方是this.Close();
,这会导致ObjectDisposedException
。也会处理它
MSDN:
关闭窗体时,对象中创建的所有资源都将被关闭
关闭并窗体被释放
我只是需要改变一下
this.Close();
到
在windows窗体上实现单例模式时我也遇到了这个错误。 解决方案是,您必须为中的静态引用分配一个空值
protected override void Dispose(bool disposing)
通过放简单的线
obj=null; //obj is the static reference in the class.
click事件触发是否正确?您是否尝试在事件中放置MessageBox.Show(“测试”)之类的内容?您是否可以发布堆栈跟踪?我尝试使用MessageBox进行放置,但我触发得很好。按钮不是问题:(OP每次都会创建
ResultForm
的新实例。这不能是异常原因。在多次显示和隐藏的情况下,它不会消耗更多内存吗?为什么?隐藏只会使它不可见和显示可见。在VB.NET中,表单在我的.Forms中吗?为什么?
protected override void Dispose(bool disposing)
obj=null; //obj is the static reference in the class.