
建议在图标的上下文菜单上有一个关闭菜单项.当用户单击它时,您的应用程序将关闭&清理,使您的程序正常退出
。。。。。 亲 windows桌面窗口应用 入口决定必须是 STA线程
如果你关毁帆旁闭了form 你用 application.run 启动的 form1 那么程序进程一定会退出释放,想进一切办法的退出释放(不单单是form 整轿洞个application 都在结束当前任务) 而你这时候在开启窗口本身。然后程序又去关闭这个窗口。。。
我使用的解决方法 你自己看下:
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_NeedConfirm)this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.MainForm_KillALL)
private void MainForm_NeedConfirm(object sender, FormClosingEventArgs e) {
if (autoconfing) {
DialogResult startauto = MessageBox.Show("后台正在托管纤橡,确定要退出程序吗?", "请确定", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
if (startauto.Equals(DialogResult.No)) {
e.Cancel = true //e.Cancel 就是取消原本的事件 这里的意思就是取消正在等待的关闭窗口事件
}
}
}
private void MainForm_KillALL(object sender, EventArgs e)
{
System.Environment.Exit(0)
}
我们来整理一下你第二次 *** 作的过程就知道问题在哪里了。点了form1实例(我们设为f1)里的button1
创建了一个form2的实例 (我们设为f2)并显示f2 隐藏f1
点击f2的button1 创建了一个form1的实例f1' 并显示f1'
注意 因为你是new的 所以这时候实际上是创建了一个新的form1的实例,而原有实例仍然处于隐藏状态并未关闭。
关闭f2
这时候f1未显示 显示的是氏枝f1'
点击f1'上的button2 关闭f1'
此时f1仍旧在内存里处于隐藏状态并未关闭。
而此烂由于f1是程序的入口主窗体 所以虽然这时候它不可见 但程序仍然未退出。
通常情况下创建子窗体的时候森核漏应该对其指定父窗体。以便于把各窗体之间连起来。例如在f1的button onclick中创建f2的时候指定其parentform为f1(this)
这样在f2关闭之前可以让其parentform显示后再关闭f2 而不是创建一个新对象。
Appliction.Exit()确实可以退出程序。但从程序运行的情况来讲 用这种方式解决问题是不对的。因为form1的实例出现了两个。如果程序做得更大些 仍然按这种思路去设计窗体,那岂不是会消耗非常多的资源。程序的运行效率和内存占用情况就非常高,并且是毫无必要的浪费资源。
楼主出现这样的错误是初学者很常见的 其原因就是对面向对象理论的理解还不够。请多翻阅一下面向对象理论书籍以避免此类问题的再次发生。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)