How to properly exit a C# application?

John Ernest Guadalupe picture John Ernest Guadalupe · Oct 19, 2012 · Viewed 586.8k times · Source

I have a published application in C#. The problem here is whenever I close the main form by clicking on the red exit button, it closes the form but it doesn't close the application. I found this out when I tried shutting down the computer, hopeful that the application I made was running smoothly then I was bombarded by a lot of child windows with which I have put MessageBox Alerts.

I tried Application.Exit but it still calls all the child windows and alerts and I don't know how to use Environment.Exit and which integer to put into it.

By the way, whenever my forms call the formclosed or form closing event I close the application with a this.Hide() function; Does that affect how my application is behaving now?

Answer

Furqan Safdar picture Furqan Safdar · Oct 19, 2012

From MSDN:

Application.Exit

Informs all message pumps that they must terminate, and then closes all application windows after the messages have been processed. This is the code to use if you are have called Application.Run (WinForms applications), this method stops all running message loops on all threads and closes all windows of the application.

Environment.Exit

Terminates this process and gives the underlying operating system the specified exit code. This is the code to call when you are using console application.

This article, Application.Exit vs. Environment.Exit, points towards a good tip:

You can determine if System.Windows.Forms.Application.Run has been called by checking the System.Windows.Forms.Application.MessageLoop property. If true, then Run has been called and you can assume that a WinForms application is executing as follows.

if (System.Windows.Forms.Application.MessageLoop) 
{
    // WinForms app
    System.Windows.Forms.Application.Exit();
}
else
{
    // Console app
    System.Environment.Exit(1);
}

Reference: Why would Application.Exit fail to work?