Files
eveo/src/Eve-O-Preview/ApplicationBase/ExceptionHandler.cs

47 lines
2.0 KiB
C#

using System;
using System.IO;
using System.Threading;
using System.Windows.Forms;
namespace EveOPreview {
// A really very primitive exception handler stuff here
// No IoC, no fancy DI containers - just a plain exception stacktrace dump
// If this code is called then something was gone really bad
// so even the DI infrastructure might be dead already.
// So this dumb and non elegant approach is used
sealed class ExceptionHandler {
private const string EXCEPTION_DUMP_FILE_NAME = "EVE-O-Preview.log";
private const string EXCEPTION_MESSAGE =
"EVE-O-Preview has encountered a problem and needs to close. Additional information has been saved in the crash log file.";
public void SetupExceptionHandlers() {
if (System.Diagnostics.Debugger.IsAttached) {
return;
}
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += delegate(Object sender, ThreadExceptionEventArgs e) {
this.ExceptionEventHandler(e.Exception);
};
AppDomain.CurrentDomain.UnhandledException += delegate(Object sender, UnhandledExceptionEventArgs e) {
this.ExceptionEventHandler(e.ExceptionObject as Exception);
};
}
private void ExceptionEventHandler(Exception exception) {
try {
String exceptionMessage = exception.ToString();
File.WriteAllText(ExceptionHandler.EXCEPTION_DUMP_FILE_NAME, exceptionMessage);
MessageBox.Show(ExceptionHandler.EXCEPTION_MESSAGE, @"EVE-O-Preview", MessageBoxButtons.OK,
MessageBoxIcon.Error);
} catch {
// We are in unstable state now so even this operation might fail
// Still we actually don't care anymore - anyway the application has been cashed
}
System.Environment.Exit(1);
}
}
}