合作的时候建立U层,从登录窗体登陆成功,然后进入主窗体,然后将登录窗体隐藏(因为登录窗体Close()了的话整个程序就会结束)。但是发现当把主窗体关闭以后,在VS里面运行的程序并没有结束,还在运行中。这就说明只是关闭了主窗体的线程,而没有关闭登录的窗体的线程,因为前面我们只是隐藏了它,而没有直接关闭它。这样的话就是当用户关闭了应用程序后,桌面上虽然不显示了,但是登录窗体的线程仍在运行着。感觉这样总是不好的,那么久要解决它。
原来的程序代码是这么写的
Program
<span style="font-size:18px;"> static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new frmLogin()); } }</span>
frmLogin
<span style="font-size:18px;"> /// <summary> /// 登陆 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnOk_Click(object sender, EventArgs e) { frmMain frmMain = new frmMain(); frmMain.Show(); this.Hide(); }</span>
经过上网查询,现在代码是这么写的
Program
<span style="font-size:18px;"> static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //实例化登陆窗体 frmLogin Login = new frmLogin(); //如果返回过来登陆成功,实例化主窗体 if (Login.ShowDialog() == DialogResult.OK) { Application.Run(new frmMain()); } }</span>
frmLogin
<span style="font-size:18px;"> /// <summary> /// 登陆 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnOk_Click(object sender, EventArgs e) { //如果登陆成功,DialogResult变为OK this.DialogResult = DialogResult.OK; //关闭本窗体 this.Close(); }</span>
程序运行的时候不再是直接在Program里面Application.Run(new frmLogin())了,而是先new一个frmLogin,等判断登录成功了,然后再在程序里面Application.Run(new frmMain()),然后将frmLogin关闭,而不是隐藏。这样当前程序里面就只有frmMain这个窗体在跑着了,就不会有frmMain窗体关闭了,而登录窗体的线程还在的情况了。
注:关于Show()和ShowDialog()的区别,可以参考博客http://blog.csdn.net/zlwzlwzlw/article/details/7915862
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-02 22:02:50