合作的时候建立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