Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何检测几十万个对象中的哪一个在终结器中引发异常?_.net_C# 4.0_Invalidoperationexception_Finalizer - Fatal编程技术网

.net 如何检测几十万个对象中的哪一个在终结器中引发异常?

.net 如何检测几十万个对象中的哪一个在终结器中引发异常?,.net,c#-4.0,invalidoperationexception,finalizer,.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)

当我们的应用程序正常退出时,在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() InvalidOperationException:句柄未初始化。 在System.WeakReference.set_目标(对象值) 位于System.Windows.Threading.Dispatcher.FromThread(线程线程) 位于MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd、Int32 msg、IntPtr wParam、IntPtr lParam) 在MS.Win32.UnsafentiveMethods.IntDestroyWindow(HandleRef hWnd)中 在MS.Win32.HwndWrapper.destroy窗口(对象参数) 在MS.Win32.hwndwapper.Dispose处(布尔disposing,布尔Ishwndbeingdomployed) 在MS.Win32.HwndWrapper.Finalize()处 我们能够确定这是一个问题,在完成过程中抛出了一个异常。通过蛮力和一点运气,我们能够解决一些问题,因此,如果用户在不加载任何文件的情况下打开和关闭应用程序,它会完全关闭。一旦用户打开一个文件,开始工作并关闭应用程序,异常就会在关机时显示——但仅在32位计算机上显示


InvalidOperationException在应用程序退出和处理application.Exit事件后都会引发。这是一个规模问题。我一直试图通过清理和修复终结器以及处理方法问题来强行解决问题。由于误解了哪个对象是父对象和子对象,该过程还引入了一些bug。我需要找出哪些类在终结过程中抛出异常(很可能是空指针异常),哪些没有。

InvalidOperationException中是否存在内部异常?您是否有堆栈跟踪信息(即:您可以在调试中复制吗?)没有内部异常,没有放置断点的位置。它发生在调试中,这就是我获得信息的方式。你有我必须处理的完整堆栈跟踪。这就是终结器的问题。它是来自地狱的堆栈跟踪,只有当窗口由运行此代码的线程拥有时,才会发生。这表示您的应用程序正在终结器线程上创建一个窗口,稍后将再次尝试销毁它。当然,这不会有好的结局。很难想象这会发生什么,如果你没有自己的终结器,那么从微软的支持那里得到帮助似乎是有道理的。我只有几个创建windows的类(谢天谢地),这些类已经过审查。我再检查一遍。嗯,我想知道是否有一个像为下拉控件创建的窗口那样的辅助窗口。