2009-06-05 85 views
2

当我关闭我的C#应用​​程序时,我得到一个窗口声音,指出一个错误。然而,当我通过关闭过程进行调试时,我一路回到Program类...关闭C#错误

它通过Application.Run(..),退出静态无效Main()函数,然后造成误差噪音。

除了噪音以外,没有任何指示有错误。我甚至不知道从哪里开始寻找!有任何想法吗?

+0

你的程序在做什么类型的事情?例如,它是否开始新线程? – 2009-06-05 20:35:57

+0

我以为我是在启动线程,但即使没有触及那个代码,错误也会发生。所以,线程不是一个因素。 – Matt 2009-06-05 20:43:02

+0

我认为你应该发布代码,如果你在程序关闭时执行任何代码。 另外,该程序如何关闭?通过使用关闭按钮? – bobbyalex 2009-06-05 20:49:33

回答

0

清理过程中出现问题,可能很难找到。有两种方法来攻击它:

通过在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事件的建议相结合。

1

它只发生在关闭你的应用程序或关闭任何应用程序时发生?

我的第一个想法是,有人改变了你的Windows声音模式,并设置关闭程序的声音与你混乱:)。

3

你可能为了获取某些信息而需要做的一件事就是为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 
} 
0

你是否有引发自定义事件的任何代码?当应用程序试图实时关闭时,这些进程仍可以运行吗?

您是否有任何可以在关闭时运行的自定义Dispose代码?