如何检测我的数十万个对象中的哪一个在终结器中抛出异常?

时间:2013-06-18 17:09:42

标签: .net c#-4.0 invalidoperationexception finalizer

当我们的应用程序正常退出时,在64位平台上没有例外。在32位平台上,我们得到了这个非常无用的异常,在Windows XP上显示为系统错误:

InvalidOperationException: Handle is not initialized.
    at System.WeakReference.set_Target(Object value)
    at System.Windows.Threading.Dispatcher.FromThread(Thread thread)
    at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
    at MS.Win32.UnsafeNativeMethods.IntDestroyWindow(HandleRef hWnd)
    at MS.Win32.HwndWrapper.DestroyWindow(Object args)
    at MS.Win32.HwndWrapper.Dispose(Boolean disposing, Boolean isHwndBeingDestroyed)
    at MS.Win32.HwndWrapper.Finalize()

我们能够确定这是在最终确定期间抛出异常的问题。通过蛮力和一点运气,我们能够解决一些问题,以便如果用户打开和关闭应用程序而不加载任何文件,它会干净地关闭。一旦用户打开文件,工作并关闭应用程序,异常就会在关机时显示 - 但仅限于32位计算机上。

在应用程序退出并处理Application.Exit事件后,将抛出InvalidOperationException。问题是规模问题。我一直试图通过清理和修复终结器来处理我的方式并处理方法问题。由于误解了哪个对象是父母和孩子,这个过程也引入了一些错误。我需要找出在最终确定期间抛出异常的类(很可能是空指针异常),而不是。

0 个答案:

没有答案