【问题标题】:Threads are still running in C#线程仍在 C# 中运行
【发布时间】:2010-11-25 10:24:26
【问题描述】:

我有两种形式:signincontrol_panel。登录完成后,我将通过this.Hide() 函数隐藏此表单,同时我正在制作control_panel 表单的新对象并通过newobj.Show(); 显示它。但是当我直接关闭control_panel 表单时,我看到第一个表单线程仍在运行。我通过 stop_debugging 按钮关闭它。我将如何同时关闭每个线程或整个程序退出。

【问题讨论】:

    标签: c# .net winforms forms


    【解决方案1】:

    您的第一个表单的线程仍在运行,因为您只调用this.Hide 所做的只是隐藏 表单;它不会关闭它。相反,您需要使用this.Close,这将关闭您的原始表单。

    如果您想确保退出整个应用程序,并在此过程中关闭任何可能仍处于打开状态的表单,您可以在表单代码的任何位置使用Application.Exit 方法。


    编辑:要扩展我的上一条评论,您可能希望在您的 Program.cs 文件中添加这样的内容:

    static class Program
    {
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [STAThread]
       static void Main()
       {
          Application.EnableVisualStyles();
          Application.SetCompatibleTextRenderingDefault(false);
    
          SignInForm frmSignIn = new SignInForm();
          if (frmSignIn.ShowDialog() == DialogResult.Yes)
          {
             //If the sign-in completed successfully, show the main form
             //(otherwise, the application will quit because the sign-in failed)
             Application.Run(new ControlPanelForm());
          }        
       }
    }
    

    【讨论】:

    • 当我通过 thhis.close () 方法关闭表单时,我的第二个表单正在出现。我不明白为什么?
    • 我假设您的意思是当您关闭第一个表单时,您的应用程序会退出?这是因为在Program.cs 文件中,您将Application.Run 设置为您的第一个表单。每当第一个表单关闭时,消息循环就结束并且应用程序退出。我强烈建议将您的启动逻辑(即显示和处理登录表单)放在Program.cs 文件中,而不是将登录表单设置为您的启动表单,因为您计划在不退出应用程序的情况下关闭它.
    • 是的,你猜对了。我在 program.cs 中运行 Apllication.Run('..')。点击登录按钮后,我只是隐藏以前的表单,制作新的对象并显示下一个表单.如果用户点击RED CROSS按钮关闭程序,我将如何关闭整个应用程序出口。
    • 使用添加到我在Program.cs 文件中的答案的代码,您可以启动显示登录表单的应用程序。如果登录表单返回“是”,则登录成功,您的程序将显示其主表单(控制面板)。否则,登录不成功或被用户取消/关闭,因此您的程序将退出。然后,稍后在您的程序中,如果用户想要关闭,他/她所要做的就是单击红色的 X 按钮,它会自动退出,因为您的主窗体现在是控制面板窗体(而不是符号-在形式上,就像我们之前说的那样)。
    • 现在完成了。我在 control_panel 中有一个函数,在 distructor 中有一个函数,我用 this.function_name() 调用它,在那里我写了 Application.Exit;没有一切正常。谢谢这也是好方法吗?
    【解决方案2】:

    在control_panel的control_panel表单属性窗口中创建FormClosed事件,下面一行写成

    private void control_panel_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }
    

    【讨论】:

    • 你能解释一下我将如何通过属性窗口添加事件,当我关闭表单时它会自动调用。我是一个非常新的.net,不能与其控件完全交互。我使用的是 C#.net2005。在此先感谢:)
    • 现在完成了。我在 control_panel 中有一个函数,在 distructor 中有一个函数,我用 this.function_name() 调用它,在那里我写了 Application.Exit;没有一切正常。谢谢。
    • 然后在属性上。属性按钮上有4个按钮单击事件按钮并搜索FormClosed事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多