我有一个子窗体,其中包含一个加载了RichText资源文件的RichTextBox
。按钮点击导致子窗体无法处理C#
当点击关闭子窗体的按钮(使用Close()
)时,窗体关闭并返回到父窗体。但是,资源没有被处置。事实上,在几乎将我的鼠标按下后,内存确实升级了。
作为一项测试,看看资源是否最终会被释放,我在父级上设置了一个窗体计时器,以便在子窗体中加载子窗体并调用Close()
。这次资源在大约5或6次打开/关闭循环后被释放。
嗯......我想。所以我改变了设置模拟现实。这次我更改了子窗体计时器触发事件以包含button1.PerformClick()
,其中触发了button1
按下事件,其中包含Close()
语句。这次资源没有被释放,内存使用量在我中止测试之前升至1千兆字节!
为什么包含Close()
的按钮事件与包含Close()
的计时器事件有所不同?
OK ..这里的父窗体上的代码,打开子窗体: -
private void showSplashScreen()
{
// Instantiating SplashScreen
SplashScreen splash = new SplashScreen();
// Displaying SplashScreen
splash.ShowDialog();
}
和这里的子窗体上的代码,关闭窗体: -
private void button1_Click(object sender, EventArgs e)
{
Close();
}
private void timer1_Tick(object sender, EventArgs e)
{
button1.PerformClick();
// Close();
}
运行时以这种方式内存使用率升级..但是,如果button1.PerformClick()
被注释掉,并且Close()
被取消注释资源定期发布
理想情况下,您需要显示在您正在测试的Close方法中启动子窗体和代码的代码。虽然有表单的引用,它不会被垃圾收集器处理。 –
不清楚..邮政编码也 –
欢呼的编辑! – Zantuna