【问题标题】:How to exit a Windows Forms/C# program如何退出 Windows 窗体/C# 程序
【发布时间】:2012-04-18 09:10:24
【问题描述】:

A 类有一个 Form1(System.Windows.Forms.Form 的子类)成员。

class A {
        Form1 form;
        public A()
        {
            form = new Form1();
            form.Show();
        }
    }
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        A a = new A();
        Application.Run();
    }

问题是我不知道如何退出程序。我在处理Form.Closed事件或调用A.Dispose()时尝试过Application.Exit(),但是Windows任务管理器仍然列出了我程序的进程。

我如何完成这个程序?

【问题讨论】:

  • @ta.speot.is Application.Run 将不起作用,因为 a 的类型为 A 而不是 FormApplicationContext。见msdn
  • @Gideon 我读得太快了。我的错。
  • @ta.speot.is :) 是的,这确实会发生,尤其是当您必须在 SO 上如此快速地阅读时

标签: c# winforms exit


【解决方案1】:

Application.Run has 3 overloads。您正在使用 this 一个没有参数。

Windows 在message loop 中运行您的程序,但它并不关心您的表单。
因此,如果您关闭表单,那也没关系;程序仍会运行。

第二个重载是每个人都使用的,Application.Run(Form)。这会在您的表单上运行一个 Windows 消息循环,因此当您单击窗口上的关闭时,应用程序将关闭。

你的代码应该是:

class A {
    Form1 form;
    public A()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        form = new Form1();
        form.Show();
        Application.Run(form);
    }
}
[STAThread]
static void Main()
{
    A a = new A();
}

【讨论】:

  • 吹毛求疵:构造函数的责任太大了。
  • @ta.speot.有点真实。 ;) chiffree 的回答很好,但随后他必须将他的 字段 form 声明为公开才能在课堂外使用 A。然后使用这样的字段很恶心。设计有点取决于 OP。
  • 也许'class A'应该扩展'Form'?比您可以节省“大”构造函数并调用“Application.Run(a)”。
【解决方案2】:

Microsoft 之后,你应该使用这个:

Application.Run(a.Form);

因为MSDN 声明

大多数 Windows 窗体开发人员不需要使用此版本的方法。您应该使用 Run(Form) 重载以使用主窗体启动应用程序,以便应用程序在主窗体关闭时终止。

【讨论】:

    【解决方案3】:

    我认为你有一个混淆。查看Application.Exit 的文档。

    您将看到 Exit 将为您引发 Closed 事件,并且在那里调用 Exit 可能会导致无限循环(这可能会导致您的问题,即应用程序仍然可见)。

    【讨论】:

      【解决方案4】:

      试试这个:

      Environment.Exit(1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-07
        相关资源
        最近更新 更多