我使用以下代码隐藏表单并显示一个新表单(基本上,我想在两个表单之间切换)。但是每次我按下button2或button1,我的应用程序在任务管理器中的内存使用量就会增加。每次单击我的按钮时,此内存使用量都会增加,并且在Application.Exit()之前永远不会释放。这是某种内存泄漏吗?我是否错误地管理了表单?
非常感谢。
表格1:
Form2 pform2;
private void button2_Click(object sender, EventArgs e)
{
if (form2 != null)
{
pform2.Show();
}
else
{
pform2 = new Form2();
pform2.Show();
this.Hide();
}
this.Hide();
表格2
Form1 pform1;
private void button1_Click(object sender, EventArgs e)
{
if (form1 != null)
{
pform1.Show();
}
else
{
pform1 = new Form1();
pform1.Show();
this.Hide();
}
this.Hide();
答案 0 :(得分:2)
如果您使用调试器,您将清楚地看到发生了什么。
问题是,每次单击该按钮时,都会创建Form1
或Form2
的新实例。字段pform1
例如。每次pform2
为空,因此单击按钮时会创建一个新实例。
我认为你正在寻找这样的东西:
public class Main
{
public Main()
{
var form = new Form1();
form.ShowDialog();
}
}
public class Form1 : Form
{
private readonly Form2 _form2;
public Form1()
: this(null)
{
_form2 = new Form2(this);
}
public Form1(Form2 form2)
{
_form2 = form2;
var button = new Button();
button.Click += ButtonOnClick;
Controls.Add(button);
}
private void ButtonOnClick(object sender, EventArgs eventArgs)
{
this.Hide();
_form2.Show();
}
}
public class Form2 : Form
{
private readonly Form1 _form1;
public Form2(Form1 form2)
{
_form1 = form2;
var button = new Button();
button.Click += ButtonOnClick;
Controls.Add(button);
}
private void ButtonOnClick(object sender, EventArgs eventArgs)
{
this.Hide();
_form1.Show();
}
}
答案 1 :(得分:1)
根据您提供的代码:您不是在表单之间“切换”,您每次都在创建新表单。
假设您在Form1
并按下按钮。然后会创建并显示pform2
,但由于您未将Form1
实例传递给pform2
- 它会在pform1
中为空,因此当您按下按钮时该表单将创建并显示Form1
的新实例,等等.....