我已经看过这个问题,并且我已经检查了那里提出的建议。我的程序创建和销毁了很多 UI 控件(很多UI 控件),任何使控件在“销毁”后仍然存在的东西都会导致这个问题。(有趣的事实:如果你在销毁它的容器之前没有将ToolStrip
控件的Visible
属性设置为 false,它不会被释放,因为它仍然在 Windows 中注册以接收主题更改事件;它只会在它不可见时取消注册,并且它显然无法知道在其容器被销毁时会发生这种情况。)
问题是,我的应用程序实际上有可能真的用完了窗口句柄。该程序有一个包含嵌套选项卡控件的表单。每个父选项卡有 12 或 13 个子选项卡,一个子选项卡上可以有 30 或 40 个控件。用户很可能在任何给定时间打开 15 个父选项卡,这进入了应用程序中 5000 多个实时控件的领域。而且我知道我的许多控件使用多个窗口句柄。
(在你说“好吧,看起来你的 UI 设计错了”之前,让我先放弃这一点:应用程序存在的全部原因首先是用户拥有巨大的数据空间,他们需要能够快速导航到。选项卡内的选项卡实际上对他们非常有效。)
我的理解是每个应用程序有 10,000 个窗口句柄的硬性限制。如果这确实是真的(我知道很多事情是真的而不是真的),那么我将不得不管理我的应用程序对它们的使用。例如,当我开始在窗口句柄上运行不足时,我可以丢弃最近最少使用的选项卡的内容。
但是我怎么知道我已经开始在窗口句柄上运行不足?这真的是解决问题的正确方法吗?
(这只是我想在 WPF 中重建此 UI 的众多原因之一。)