Это на самом деле не так сложно сделать.
Я бы посоветовал поместить любой код для обработки исключения в основную форму, чтобы сохранить program.cs
как можно более чистым.
Первый в вашем Program.cs
поместите это
static class Program
{
public static Form MainForm = null;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ThreadException += Application_ThreadException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
MainForm = new Form1();
Application.Run(MainForm);
}
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
((Form1)MainForm).Application_ThreadException(sender, e);
}
}
Затем в вашей основной форме поместите это
public void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
// All unhandled exceptions will end up here, so do what you need here
// log the error
// show the error
// shut the application down if needed
// ROLLBACK database changes
// and so on...
}