当前位置:  开发笔记 > 开发工具 > 正文

"创建窗口句柄时出错"

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

我们正在开发一个非常大的.NET WinForms复合应用程序 - 不是CAB,而是一个类似的本土框架.我们正在运行在Windows Server 2003上的Citrix和RDP环境中运行.

我们开始遇到随机和难以复制的"错误创建窗口句柄"错误,这似乎是我们的应用程序中的旧时尚句柄泄漏.我们正在大量使用第三方控件(Janus GridEX,Infralution VirtualTree和.NET Magic对接),我们根据数据库中的元数据进行了大量动态加载和内容呈现.

谷歌有很多关于这个错误的信息,但没有很多关于如何避免这方面问题的可靠指导.

stackoverflow社区是否对我构建易于操作的winforms应用程序有任何良好的指导?



1> Jack Bolding..:

我已经跟踪了很多问题,因为在WinForms中没有像预期的那样卸载UI.

以下是一些一般提示:

很多时候,控件将继续使用,因为控件事件没有被正确删除(工具提示提供程序在这里导致我们真正的大问题)或控件没有正确处理.

在所有模态对话框周围使用"使用"块以确保它们是Disposed

有一些控件属性会在必要之前强制创建窗口句柄(例如,设置TextBox控件的ReadOnly属性将强制实现控件)

使用像.Net Memory profiler这样的工具来获取所创建的类的计数.此工具的较新版本还将跟踪GDI和USER对象.

尽量减少使用Win API调用(或其他DllImport调用).如果确实需要使用interop,请尝试以这样的方式包装这些调用,即using/Dispose模式将正常工作.



2> aderesh..:

当我将NativeWindow子类化并手动调用CreateHandler时,我遇到了这个错误.问题是我忘了在我的覆盖版本的WndProc中添加base.WndProc(m).它导致了同样的错误



3> 小智..:

我遇到了这个异常,因为无限循环创建了新的UI控件并设置了它的属性.在循环多次之后,当变更控制可见属性时抛出此excption.我发现用户对象和GDI对象(来自任务管理器)都非常大.

我想你的问题是类似的原因,系统资源被那些UI控件耗尽.

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