c# 窗口关闭方法

背景:点击datagridview某条信息弹出信息详情窗口,当连续点击时需要关闭之前的详情窗口。

实现方式:

父窗口中 全局创建子窗口(MsgDetailFrm  ): MsgDetailFrm deFrm = new MsgDetailFrm();

在datagridview的双击事件中:

        private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (deFrm==null)
            {
                deFrm = new MsgDetailFrm();
            }
            deFrm.Show();
        }

但在实际操作时,点击详情窗口关闭,再次点击信息类表中某条信息时,报错,查看原因:

关闭窗口不为空!

也就是关闭窗口后, 

deFrm!=null

但调用

deFrm.Show();时报错


修改:

全局变量中: MsgDetailFrm deFrm;

deFrm = null;
deFrm = new MsgDetailFrm();

在调用deForm时强制为null,重新实例化

细想之后,发现还是对窗口的关闭认识不清,以及不当的编程习惯造成。

解决方法:

1.在关闭窗口时释放窗口资源的同时,也将变量置为null;

2.换用彻底关闭窗口的方法。

补充:窗口关闭的几种方法比较

1.this.Close();   只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;

2.Application.Exit();  强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出;

3.Application.ExitThread(); 强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题;

4.System.Environment.Exit(0);   这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。 

一般情况下不需要给应用程序写退出函数,执行默认退出函数即可,但是有情况还需要用以上几种函数的。

 
原文地址:https://www.cnblogs.com/allencxw/p/9860498.html