22

How do i return a non-zero exit code from a Windows Forms application.

Application.Exit() is the preferred way to exit the application, but there is no exit code argument.

I know about Environment.Exit(), but that is not a nice way to close the application loop....

3 Answers 3

33

Application.Exit just force the call to Application.Run (That is typically in program.cs) to finish. so you could have :

Application.Run(new MyForm());
Environment.Exit(0);

and still inside your application call Application.Exit to close it.

Small sample

class Program
{
    static int exitCode = 0;

    public static void ExitApplication(int exitCode)
    {
        Program.exitCode = exitCode;
        Application.Exit();
    }

    public int Main()
    {
        Application.Run(new MainForm());
        return exitCode;
    }
}

class MainForm : Form
{
    public MainForm()
    {
        Program.ExitApplication(42);
    } 
}
Sign up to request clarification or add additional context in comments.

3 Comments

Great example, very close to what i need.
make sure your exitcodes are positive integers, or else %ERRORLEVEL% on command prompt will return you 0 for negative codes. So in the sample, exitCode should be uint and ExitApplication should take uint as well.
WRONG ANSWER. Environment.Exit() does not terminate a Winforms application properly. See stackoverflow.com/questions/13046019/…
16

If your main method returns a value you can return the exit code there.

Otherwise you can use Environment.ExitCode to set it. E.g. to set the would-be exit code when the main form is about to close:

private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
    Environment.ExitCode = <exit code>;
}

1 Comment

+1 Great quick way to accomplish this. I have however a very big app, with quite a few possible exit codes and alot of different ways to exit. I will go with the example by VirtualBlackFox in my current application.
-1

Go to event tab in your form and in click place double click on it and then in code place write Environment.Exit(0);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.