这个问题相当复杂,我不确定如何解决它。我启动应用程序时遇到以下异常。
[FATAL] Unhandled exception. EXCEPTION OCCURRED:System.Runtime.InteropServices.SEHException External component has thrown an exception. Boolean CloseHandle(IntPtr)
[FATAL] Last Win32 error code: 00000006; Last HRESULT: 80070006
仅当我运行调试器时才会发生这种情况。如果我在没有调试器的情况下启动应用程序,那么它永远不会抛出SEHException。另一个事实是,当我继续它时,它会在Visual Studio中再次弹出,然后退出应用程序。
我现在已经设法将其缩小到这个:
Dispatcher dispatcher = Dispatcher.CurrentDispatcher;
InternalDispatcher = new WpfDispatcher(dispatcher);
它确实在构造函数调用 WpfDispatcher 之后发生。
internal WpfDispatcher([NotNull] Dispatcher dispatcher)
{
_dispatcher = dispatcher ?? throw new ArgumentNullException(nameof(dispatcher));
}
但是,我不知道为什么会发生这种情况。 WpfDispatcher
- 类只是一个包装器,允许我使用WinForm或WPF进行调度,具体取决于所选的兼容模式。
为什么这只发生在附加的调试器上?代码已经存在了很长时间,而且这种情况最近才开始......
有没有办法缩小范围?我只是不知道为什么会这样。
PS:刚发生这种情况时检查了线程,看起来这个异常来自GC Finalizer线程:
Not Flagged > 4628 2 Worker Thread GC Finalizer Thread mscorlib.dll!Microsoft.Win32.SafeHandles.SafeFileHandle.ReleaseHandle Highest
PS2:激活本机调试器,我得到了这个(稍微)更详细的异常:
Exception thrown at 0xFE58917A in Lab.Wpf.exe: 0xC0000008: An invalid handle was specified.