主窗体关闭后登录窗体仍然运行

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

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 32
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值