日期:2014-05-17  浏览次数:21015 次

winform中,窗口跳转后怎么关掉上一个窗口?
假如,我从窗口A跳到窗口B,那么就应该显示窗口B而关掉窗口A。
我看到有人教用隐藏的。我是这么写

在A中写:
B new_form = new B();
new_form.owner = this;
this.hide();
new_form.showdialog();

这样写的话,窗口A是可以关掉。但是问题是,A窗口貌似只是隐藏的,所以当我关掉B窗口时,我在进程里还是看到这个程序在运行的。所以如果程序有很多窗口,这样隐藏的会不会造成资源占用过多呀?
所以想问,如何实现窗口跳转后关闭掉上一个窗口呀?

------解决方案--------------------
B new_form = new B();
new_form.owner = this;
this.hide();
new_form.showdialog();
Application.ExitThread();

Application.ExitThread();是退出当前线程。
首先默认情况下我们的程序是单线程的,
this.hide();后把当前窗体隐藏起来了,然后new_form.showdialog();模态弹出新窗口。
这个时候线程不会继续执行(被阻塞了),
直到我们关闭了新弹出来的模态窗口后,程序才会继续执行Application.ExitThread();此时线程关闭,所有一切都关闭了,隐藏的窗口也关闭了。


我发在7楼的方法(2种都可以),
新开一个线程显示新窗口,当前线程立即退出,不会一直隐藏在后台占用资源。这种方式更加科学。


请问通过线程启动新窗口和直接启动,有什么不同吗?
一个藏在后台,一个立即关闭。