gpt4 book ai didi

c# - Win32异常 : Operation completed successfully

转载 作者:太空狗 更新时间:2023-10-30 00:27:01 24 4
gpt4 key购买 nike

以下代码因异常而崩溃:

MyWindow wnd = new MyWindow();
wnd.Show(); //here an exception occurs

异常很奇怪,但据我了解它是 .net 中的错误

System.ComponentModel.Win32Exception (0x80004005): The operation completed successfully
at MS.Win32.UnsafeNativeMethods.GetDC(HandleRef hWnd)
at System.Windows.Interop.HwndTarget..ctor(IntPtr hwnd)
at System.Windows.Interop.HwndSource.Initialize(HwndSourceParameters parameters)
at System.Windows.Interop.HwndSource..ctor(HwndSourceParameters parameters)
at System.Windows.Window.CreateSourceWindow(Boolean duringShow)
at System.Windows.Window.CreateSourceWindowDuringShow()
at System.Windows.Window.SafeCreateWindowDuringShow()
at System.Windows.Window.ShowHelper(Object booleanBox)
at System.Windows.Window.Show()

MyWindow 对象是一个窗口,里面有一些矢量图形,但不是太多。此外,当已经打开和关闭 10-20 个 MyWindow 对象时,也会发生这种情况。

解决方案:原因是 GDI 对象泄漏。他们在我的低级代码中创建时包含错误。因此,问题与 MyWindow 对象无关。

最佳答案

它不会轰炸 winapi 错误代码,实际错误代码是 E_FAIL,一个 COM 错误代码。这对诊断任何事情都没有帮助,它只意味着“无法做到,不知道为什么”。 GetDC() 如何产生该错误代码很难猜测,我怀疑它与 winapi 函数 Hook 的环境有关。也许类似于远程桌面或屏幕录像机。请尝试在另一台机器上运行它。

GetDC() 失败的“正常”原因是句柄泄漏。当 Windows 已经消耗了 10,000 个句柄时,它会停止为进程提供更多句柄。您可以使用 TaskMgr.exe 的“进程”选项卡进行诊断。查看 + 选择列并勾选句柄、用户对象和 GDI 对象。首先检查进程列表并确认您没有消耗大量进程的进程。 session 中所有进程的 GDI 对象总数受 session 池大小的限制。接下来运行您的程序并关注您的过程的值。

关于c# - Win32异常 : Operation completed successfully,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8465464/

24 4 0