无法退出申请

时间:2018-01-20 09:03:56

标签: c# winforms visual-studio

我正在使用Visual Studio中的软件,用C#编写代码,而我注意到了一些东西。我无法弄清楚如何退出应用程序。

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void ExitButton_Click(object sender, EventArgs e)
        {
            Application.Exit(); // This works, when I run the application and click on the button, it will indeed quit.
        }
    }
}

如上所述,当我点击按钮时,它确实会退出应用程序。但是,如果我将Application.Exit();放在其他地方,它将无效。因此,如果我像这样修改Form1(),它将不会自动退出应用程序:

public Form1()
{
    InitializeComponent();
    Application.Exit();
}

如果满足某些条件,则需要立即退出应用程序,例如,如果缺少某些应用程序文件。

我试图做以下事情:

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            closeapp();
        }

        public void closeapp()
        {
            Application.Exit();
        }

        private void ExitButton_Click(object sender, EventArgs e)
        {
            closeapp();
        }
    }
}

现在,如果我运行该应用程序,它将不会自动退出,但是,如果我单击“退出”按钮,它将退出该应用程序。

所以看起来如果没有从表单中发生的事件中调用它,它就不会关闭应用程序。

我使用关键字“Application.Exit();”在线搜索(包括Google和StackOverflow)不工作他们建议我使用“Environment.Exit();”。现在在我的测试应用程序中,这是有效的,但在我正在处理的实际应用程序中,当我删除所有代码时(当然在备份时),它看起来像以下情况,但它仍然不起作用。

namespace Censored
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Environment.Exit(1);
        }
    }
}

它可能是什么原因导致它不能在一个应用程序中工作,而是在另一个应用程序中工作?有什么东西被腐蚀了吗?

2 个答案:

答案 0 :(得分:2)

初始化应用程序时,您无法应用@RestController public class ControllerC { public ResponseEntity<String> methodC(@RequestBody String someReq) { RestTemplate restTemplate = new RestTemplate(); if (checkPam(someReq)) { String fooResourceUrl = "http://path-to-server-a/path-to-service-a"; ResponseEntity<String> response = restTemplate.getForEntity(fooResourceUrl , String.class); }else { String fooResourceUrl = "http://path-to-server-b/path-to-service-b"; ResponseEntity<String> response = restTemplate.getForEntity(fooResourceUrl , String.class); } return null; } 。那么,如果您的条件未得到满足,为什么不强迫您在Application.Exit退出申请;

FormLoad

答案 1 :(得分:1)

我认为在这里做的最好的事情不是Application.Exit,因为正如你所说,你想要退出应用程序,因为缺少一些文件。如果确实缺少某些文件,您应该向用户显示一条消息,然后然后退出。 Application.Exit将以静默方式退出应用程序,因此用户不知道某些文件丢失。糟糕的用户体验!

显示错误消息的一种简单方法是抛出异常:

throw new FileNotFoundException(
    "Some application files are missing! Please add them in before starting this application!");

Application.Exit在此处不起作用的原因是因为尚未在该时间点创建“应用程序”。在Main方法中,您应该有以下这一行:

Application.Run(new Form1());

调用上述方法后将创建“Application”。但在调用Run之前,还有什么叫做?表单的构造函数! 然后调用InitializeComponent,您要退出该应用程序。目前尚未调用Run