0

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 任务管理器仍然列出了我的程序的进程。

我如何完成这个程序?

4

4 回答 4

4

Application.Run 有 3 个重载。您正在使用这个没有参数。

Windows 在消息循环中运行您的程序,但它并不关心您的表单。
因此,如果您关闭表单,那也没关系;该程序仍将运行。

第二个重载是每个人都使用的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();
}
于 2012-04-18T09:16:34.960 回答
2

跟随微软你应该使用这个:

Application.Run(a.Form);

因为MSDN声明

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

于 2012-04-18T09:14:24.767 回答
1

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

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

于 2012-04-18T09:14:36.603 回答
0

试试这个:

Environment.Exit(1);
于 2012-04-18T09:14:23.437 回答