当我们的应用程序正常退出时,在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。问题是规模问题。我一直试图通过清理和修复终结器来处理我的方式并处理方法问题。由于误解了哪个对象是父母和孩子,这个过程也引入了一些错误。我需要找出在最终确定期间抛出异常的类(很可能是空指针异常),而不是。