当前位置:  开发笔记 > 编程语言 > 正文

Winforms问题 - 创建窗口句柄时出错

如何解决《Winforms问题-创建窗口句柄时出错》经验,为你挑选了4个好方法。

我们在Winform应用程序中看到此错误.任何人都可以帮助您看到此错误的原因,更重要的是如何修复它或避免它发生.

System.ComponentModel.Win32Exception: Error creating window handle.
   at System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
   at System.Windows.Forms.Control.CreateHandle()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.OnVisibleChanged(EventArgs e)
   at System.Windows.Forms.ButtonBase.OnVisibleChanged(EventArgs e)

itsmatt.. 51

您是否运行Process Explorer或Windows任务管理器来查看GDI对象,句柄,线程和USER对象?如果没有,请选择要查看的列(任务管理器选择查看 - >选择列...然后运行您的应用程序并查看该应用程序的那些列,看看其中一列是否真的变大了.

可能是您已经拥有了您认为已清理但尚未处置的UI组件.

以下是有关此内容的链接,可能会有所帮助.

祝好运!



1> itsmatt..:

您是否运行Process Explorer或Windows任务管理器来查看GDI对象,句柄,线程和USER对象?如果没有,请选择要查看的列(任务管理器选择查看 - >选择列...然后运行您的应用程序并查看该应用程序的那些列,看看其中一列是否真的变大了.

可能是您已经拥有了您认为已清理但尚未处置的UI组件.

以下是有关此内容的链接,可能会有所帮助.

祝好运!



2> mjezzi..:

应用程序的窗口句柄限制是10,000个句柄.您收到错误是因为您的程序创建了太多句柄.你需要找到内存泄漏.正如其他用户所建议的那样,使用Memory Profiler.我也使用.Net Memory Profiler.此外,如果您在表单关闭之前从表单中删除它们,请确保在控件上调用dispose方法(否则控件将不会处理).您还必须确保没有向控件注册的事件.我自己也有同样的问题,尽管我已经知道,我仍然有一些内存泄漏仍然无法解决.



3> Fabrice..:

请参阅我的这篇文章"创建窗口句柄时出错"以及它与USER对象和桌面堆的关系.我提供一些解决方案.



4> AlfredBr..:

此问题几乎总是与GDI对象计数,用户对象计数或句柄计数有关,通常不是因为您的计算机上存在内存不足的情况.

当我跟踪其中一个错误时,我打开ProcessExplorer并观察这些列:句柄,线程,GDI对象,用户对象,私有字节,虚拟大小和工作集.

(根据我的经验,问题通常是由于事件处理程序持有对象并阻止其被处置而导致对象泄漏.)

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有