【发布时间】:2010-10-06 01:42:11
【问题描述】:
我已经查看了this question,并且已经查看了那里提出的建议。我的程序创建并销毁了很多 UI 控件(lot 的 UI 控件),任何使控件在“销毁”后仍然存在的东西都会导致这个问题。 (有趣的事实:如果您在销毁容器之前没有将ToolStrip 控件的Visible 属性设置为false,它不会被释放,因为它仍然在Windows 中注册以接收主题更改事件;它只会取消注册当它不可见时它自己,并且它显然没有任何方式知道当它的容器被销毁时正在发生这种情况。)
问题是,我的应用程序实际上有可能真的用完了窗口句柄。该程序有一个包含嵌套选项卡控件的表单。每个父选项卡有 12 或 13 个子选项卡,一个子选项卡上可以有 30 或 40 个控件。用户很可能在任何给定时间打开 15 个父选项卡,这进入了应用程序中 5000 多个实时控件的领域。而且我知道我的许多控件使用多个窗口句柄。
(在你说“好吧,看起来你的 UI 设计错了”之前,让我不要再说了:应用程序存在的全部原因首先是用户拥有巨大的数据空间,他们需要能够快速导航到。选项卡内的选项卡实际上对他们非常有效。)
我的理解是每个应用程序有 10,000 个窗口句柄的硬性限制。如果这确实是真的(我知道很多事情是真的而不是真的),那么我将不得不管理我的应用程序对它们的使用。例如,当我开始使用窗口句柄时,我可以丢弃最近最少使用的选项卡的内容。
但是我怎么知道我已经开始在窗口句柄上运行不足?这真的是解决问题的正确方法吗?
(这只是我想在 WPF 中重建此 UI 的众多原因之一。)
【问题讨论】:
-
"这只是我想在 WPF 中重建此 UI 的众多原因之一。" 顺便说一下,当我在谷歌上搜索字符串时,我登陆了这个页面“创建窗口句柄 WPF 时出错”。我在 WPF 应用程序中遇到了这个错误。 :)
-
也许我说得太早了。我的错误是由 WPF 应用程序中托管的 WinForms 控件(
PropertyGrid)生成的。
标签: c# controls user-interface window-handles