Итак, у меня есть программа, которая должна выполнить некоторую очистку перед выходом, даже если это принудительный выход. Я знаю, что нажатие кнопки питания - это принудительный выход, при котором очистка невозможна, но это может вызвать и другие, более серьезные проблемы.
Программа подключается к ряду событий, чтобы позаботиться об очистке. Моя проблема заключается в том, что это не работает должным образом при компиляции в режиме отладки, и это не работает должным образом при компиляции в режиме выпуска и запуска из VS (F5). В режиме выпуска, запустите из консоли или из файлового менеджера, все делает то, что он должен.
При попытке отладки приложения, если запущена подпрограмма Handler, я получаю приятное диалоговое окно, в котором говорится, что vshost не удалось, и ищет решение проблемы ...
Что мне нужно сделать, чтобы этот код работал в режиме отладки и выпуска?
EDIT
Ошибка: Ошибка http://i51.tinypic.com/2ppndy8.png
точные шаги:
1) Нажмите F5
2) подожди секундочку
3) Нажмите [X] в окне консоли.
4) Ошибка, см. Связанное изображение выше
class Program
{
public enum CtrlTypes
{
CTRL_C_EVENT = 0,
CTRL_BREAK_EVENT,
CTRL_CLOSE_EVENT,
CTRL_LOGOFF_EVENT = 5,
CTRL_SHUTDOWN_EVENT
}
static string conDB = "";
[DllImport("Kernel32")]
public static extern bool SetConsoleCtrlHandler(HandlerRoutine Handler, bool Add);
public delegate bool HandlerRoutine(CtrlTypes CtrlType);
private static bool ConsoleCtrlCheck(CtrlTypes ctrlType)
{
DatabaseAccess db = DatabaseAccess.Instance; //Issues Here
// Cleanup code removed
return true;
}
public static void ExitProcess(object sender, EventArgs args)
{
#if DEBUG
Debug("\n\n\nDebug Mode\nPress any key to continue...\n");
Console.ReadKey(true);
#endif
}
static int Main(string[] args)
{
SetConsoleCtrlHandler(new HandlerRoutine(ConsoleCtrlCheck), true);
AppDomain.CurrentDomain.ProcessExit += ExitProcess;
// App code removed
return 0;
} // End main
static void Debug(string text)
{
#if DEBUG
Console.WriteLine(text);
#endif
}
}