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

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

主窗体关闭后登录窗体仍然运行的相关文章

ssh 关闭后仍保持当前运行的进程

ssh 关闭后仍保持当前运行的进程 由于各种原因,需要通过ssh登录linux或者unix主机,很多时候我们需要通过ssh的终端启动一 些服务或者运行一些程序,但是默认情况下,当我们关闭ssh终端连接,随之启动的程序也会关闭.原因是:SSH会话关闭时,ssh所关联的pty关闭,系 统会给这个pty所关联的session中的所有进程发送SIGHUP信号,SIGHUP的默认信号处理程序是终止进程,除非进程自己处理了 SIGHUP. 解决方法如下: 使用现成的命令nohup,可以让指定的程序在pty关

js父窗体关闭,子窗体紧随

近来的.我们遇到了权限管理系统.由于权限管理系统与原系统的风格不符.打开一个全新的窗口.问题就来了.admin取消后,,权限管理形式不关闭.其他普通用户登录后.尚能经营权的管理形式. 简化问题:admin时候,或者main.html关闭的时候,打开的全部新窗体一起关闭.问题就攻克了 直接看代码吧: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/ht

让java程序在后台一直执行(例如putty关闭后后台程序继续运行)

如果在终端中执行java -jar xxx.jar&命令,当终端关闭时,xxx.jar也会同时结束运行,但是如果执行nohup java -jar xxx.jar&命令,则程序会在后台一直运行,值得注意的是,此时程序控制台输出会被转移到nohup.out文件中. 附:nohup命令参考 nohup 命令  用途:不挂断地运行命令. 语法:nohup Command [ Arg ... ] [ & ] 描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的

实现Winform端窗体关闭后刷新html网页内容

一.首先要知道刷新网页的路径: 1 frmPointEasyToBeat fpetBeat = new frmPointEasyToBeat(bookNoteId, userInfo.UserId); 2 fpetBeat.ShowDialog(); 3 if (webBrowser1.Document?.Window?.Frames != null) 4 { 5 foreach (var iFrame in webBrowser1.Document?.Window?.Frames) 6 { 7

winform程序登陆后关闭登录窗体

用winform做程序的时候,我们一般都是在Program先启动登录窗体,然后登录成功后才创建主窗体,结果这就导致了登录窗体无法关闭 所以如果我们不在Program的程序入口先创建登录窗体的话就能完美实现登录成功后关闭登录窗体的功能了,直接贴代码 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; n

ShowDialog()弹出的窗体,关闭后,主窗体会闪烁的BUG

如图,要实现下列等待界面时,等待界面是以ShowDialog弹出的,发现关闭后,主窗体会闪烁一下的BUG,搞半天没搞明白啥原因. 过了几天后,搜索了下发现,在fm.ShowDialog(),显示出来时,其他位置再调用fm.Close(),后又调用了fm.Dispose(),注释掉了fm.Dispose()后,就好了.. ShowDialog()弹出的窗体,关闭后,主窗体会闪烁的BUG

浅析c#中登录窗体和欢迎窗体关闭的问题

第一次在cnbogs发文章,这次来个很基础的,主要给小白看. 在c#的winform编程中,我们经常会做登录窗体或欢迎窗体,并把他们作为启动窗体. 但是,我们有可能会遇到一些问题. 请看下面的代码: private void button1_Click(object sender, EventArgs e) { this.Close(); new Form2().Show(); } 这段代码想让form1中的button1在点击后关闭form1,show出form2,但是目的没有达到,form2

C# WinForm 解决子窗体放大后,子窗体图标放大的问题

解决子窗体放大后,子窗体的图标占用主窗体的菜单栏的问题. C#子窗体最大化时, 那个图标跑到主窗体的前面去了, 造成界面不统一也不美观. 所以需要进行处理, 只要有主窗体的菜单ItemAdded事件中加进下面代码: if (e.Item.Text.Length == 0 || e.Item.Text == "还原(&R)" || e.Item.Text == "最小化(&N)") {     e.Item.Visible = false;} 运行再查

登录窗体登录失败但是MainForm依然弹出无法结束的解决方法

问题描述:登录窗体登录失败但是MainForm依然弹出无法结束的解决方法 解决方法:把form3.close,exit; 改为application.terminate 结束退出程序: 参考链接:http://www.delphitop.com/html/chengxu/131.html delphi关闭程序Close,application.Terminate与halt区别 当Close是一个主窗体时,程序会退出.Close会发生FormClose事件,FormCloseQuery事件Halt