所以我有一个程序需要在退出之前进行一些清理,即使它是强制退出。我知道,按下电源按钮是强行退出,不会发生清理,但这也会导致其他更大的问题。
该程序挂钩了许多事件来处理清理工作。我的问题是,在调试模式下编译时这不能正常工作,并且在发布模式下编译并在VS(F5)内运行时,这不能正常工作。在发布模式下,从控制台或文件管理器运行,一切都按照预期进行。
当试图调试应用程序时,如果Handler例程被触发,我会得到一个很好的对话框,说vshost已经失败,正在寻找问题的解决方案......
如何使此代码在调试和发布模式下工作,我该怎么办?
修改
错误:Error 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
}
}