C#关闭时出错

C#关闭时出错,c#,C#,当我关闭我的C#应用程序时,我会听到一个windows声音,表明有错误。然而,当我通过关闭过程进行调试时,我一路返回到程序类中 它通过Application.Run(..),退出静态void Main()函数,然后发出错误噪音 除了噪音之外,没有任何错误的迹象。我甚至不知道从哪里开始找!有什么想法吗?它只在你关闭应用程序时发生,还是在你关闭任何应用程序时发生 我的第一个想法是有人更改了您的windows声音方案,并将关闭程序声音设置为干扰您:)。为了获得一些信息,您可以做的一件事是连接AppDo

当我关闭我的C#应用程序时,我会听到一个windows声音,表明有错误。然而,当我通过关闭过程进行调试时,我一路返回到程序类中

它通过Application.Run(..),退出静态void Main()函数,然后发出错误噪音


除了噪音之外,没有任何错误的迹象。我甚至不知道从哪里开始找!有什么想法吗?

它只在你关闭应用程序时发生,还是在你关闭任何应用程序时发生


我的第一个想法是有人更改了您的windows声音方案,并将关闭程序声音设置为干扰您:)。

为了获得一些信息,您可以做的一件事是连接AppDomain.UnhandledException和Application.ThreadException事件的事件侦听器。这是一个很长的机会,但可能会提供一些信息。您可以在Main函数的开头添加以下内容进行设置,并让它们在消息框中显示任何异常信息:

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代码可以在关闭时运行?

清理过程中出现了一些问题,可能很难找到。有两种方法可以解决此问题:

通过将所有内容包装在一个try/catch中,并在应用程序之后添加一些代码,提高在您仍处于控制(主)状态时检测到它的机会。运行以尽可能多地进行清理。我能想到几件事:

GC.Collect(); 
GC.WaitForPendingFinalizers();
Thread.Sleep(1000);
GC.Collect(); 
GC.WaitForPendingFinalizers();
收集至少2次,可能更多。本着同样的精神,在main表单的OnClosing中添加一些Application.DoEvents()

另一种方法更依赖于您的代码,在黑暗中摸索:查找可以设置为null的所有静态字段/属性,以及可以在退出时确定地处置的一次性对象


所有这些加上Fredrik Mörks对未处理异常事件的建议。

您的程序在做什么?例如,它是否正在启动新线程?我以为我正在启动线程,但即使我不接触该代码,错误也会发生。因此,线程不是一个因素。我认为如果程序关闭时执行了任何代码,您应该发布这些代码。此外,该计划是如何结束的?通过使用“关闭”按钮?也值得查看Windows事件日志。马特,你解决了吗?也许你可以留下评论来解释错误,你甚至可以发布自己问题的答案。这是我的第一个想法:)不幸的是,这只是在这个单一的应用程序中。好主意——谢谢!然而,这些都是空的:(这为我解决了问题,我只是在继续开发应用程序时把它放在那里,意思是回到它上来。当我最终着手删除它时,问题不再存在。如果我有时间,我会回顾代码更改,看看我在哪里做的更改似乎神奇地解决了问题。但是谢谢大家的宝贵意见!