当我关闭我的C#应用程序时,我得到一个窗口声音,指出一个错误。然而,当我通过关闭过程进行调试时,我一路回到Program类...关闭C#错误
它通过Application.Run(..),退出静态无效Main()函数,然后造成误差噪音。
除了噪音以外,没有任何指示有错误。我甚至不知道从哪里开始寻找!有任何想法吗?
当我关闭我的C#应用程序时,我得到一个窗口声音,指出一个错误。然而,当我通过关闭过程进行调试时,我一路回到Program类...关闭C#错误
它通过Application.Run(..),退出静态无效Main()函数,然后造成误差噪音。
除了噪音以外,没有任何指示有错误。我甚至不知道从哪里开始寻找!有任何想法吗?
清理过程中出现问题,可能很难找到。有两种方法来攻击它:
通过在try/catch中包装Main中的所有内容并在Application.Run之后添加一些代码,以增强在仍处于控制范围内时(主要)检测它的机会尽可能多地进行清理。我能想到的几件事:
GC.Collect();
GC.WaitForPendingFinalizers();
Thread.Sleep(1000);
GC.Collect();
GC.WaitForPendingFinalizers();
收集至少2次,也许更多。本着同样的精神,在MainForm的OnClosing中添加一些Application.DoEvents()。
另一种方法更依赖于您的代码,在黑暗中进行刺探:查找可设置为null的所有静态字段/属性以及可以在Exit上确定性地处置的Disposable对象。
所有这些与FredrikMörks对UnhandledException事件的建议相结合。
它只发生在关闭你的应用程序或关闭任何应用程序时发生?
我的第一个想法是,有人改变了你的Windows声音模式,并设置关闭程序的声音与你混乱:)。
你可能为了获取某些信息而需要做的一件事就是为AppDomain.UnhandledException和Application.ThreadException事件挂接事件监听器。这是一个长镜头,但可能会提供一些信息。您可以添加在主函数来设置他们之初以下,并将它们显示在消息框中的任何异常信息:
static void Main()
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(delegate(object sender, UnhandledExceptionEventArgs e)
{
MessageBox.Show(e.ExceptionObject.ToString());
});
Application.ThreadException += new ThreadExceptionEventHandler(delegate(object sender, ThreadExceptionEventArgs e)
{
MessageBox.Show(e.Exception.ToString());
});
// run your app
}
你是否有引发自定义事件的任何代码?当应用程序试图实时关闭时,这些进程仍可以运行吗?
您是否有任何可以在关闭时运行的自定义Dispose代码?
你的程序在做什么类型的事情?例如,它是否开始新线程? – 2009-06-05 20:35:57
我以为我是在启动线程,但即使没有触及那个代码,错误也会发生。所以,线程不是一个因素。 – Matt 2009-06-05 20:43:02
我认为你应该发布代码,如果你在程序关闭时执行任何代码。 另外,该程序如何关闭?通过使用关闭按钮? – bobbyalex 2009-06-05 20:49:33