Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';退出申请_C#_Winforms_Visual Studio - Fatal编程技术网

C# Can';退出申请

C# Can';退出申请,c#,winforms,visual-studio,C#,Winforms,Visual Studio,我在Visual Studio中开发一个软件,用C#编写代码,这时我注意到了一些东西。我不知道如何退出应用程序 namespace WindowsFormsApp2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void ExitButton_Click(obje

我在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();
        }
    }
}
现在,如果我运行应用程序,它将不会自动退出,但是,如果我单击退出按钮,它将退出应用程序

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.
        }
    }
}
因此,如果它不是从表单中发生的事件调用的,它将不会关闭应用程序

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.
        }
    }
}
我在网上(包括Google和StackOverflow)搜索过关键词“Application.Exit();”不起作用。他们建议我使用“Environment.Exit();”。现在在我的测试应用程序中,这是可行的,但在我正在开发的实际应用程序中,当我删除所有代码时(当然是在有备份的情况下),它看起来如下所示,但仍然不起作用

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

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

您无法应用
应用程序。请在初始化应用程序时退出
。那么,如果您的条件不满足,为什么不在
FormLoad
中强制退出应用程序

private void Form1_Load(object sender, EventArgs e)
{
    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());

调用上述方法后将创建“应用程序”。但是在调用
Run
之前,还调用了什么?表单的构造函数!然后它调用
InitializeComponent
,您要在其中退出应用程序。此时尚未调用
Run

这可能与需要一个消息循环来处理消息有关。我希望您有一个
应用程序.Run(newform1())在program.cs中。当Form1被构造时,消息循环尚未运行,因此退出消息将不会被捕获。关于为什么会发生这种情况/这种情况是如何发生的,我们最好等汉斯·帕桑特(Hans Passant)出现。你能详细说明为什么
Environment.Exit(1)在同一地点不起作用?我希望它能够绕过由
应用程序
控制的消息循环调用@rene我现在没有Windows机器。我在Mac和
环境的VS上做了一些测试。甚至没有调用Exit