Добавьте свойство ExitCode (или что-то подобное) к классу формы:
class MyForm : Form {
public int ExitCode { get; set; }
void ShutDownWithError(int code) {
ExitCode = code;
Close();
}
}
Где-то в вашем коде у вас есть:
static void Main() {
// ...
MyForm form = new MyForm();
Application.Run(myForm);
}
Измените это на:
static void Main() {
// ...
MyForm myForm = new MyForm();
Application.Run(myForm);
Environment.Exit(myForm.ExitCode);
}
Когда в вашей форме вызывается метод ShutdownWithError, вы закрываете основную форму. Это выпрыгнет из цикла, начатого с Application.Run. Затем вы просто получаете код завершения и завершаете процесс с помощью Environment.Exit.