如何debugging“错误创build窗口句柄”错误?

我试图debugging一个基于Windows .NET的应用程序出来的错误。 错误信息就像“错误创build窗口句柄”。 在研究这个错误时,我发现可能的原因是应用程序使用了超过10000个用户句柄 。

我想把一些debugging代码放到应用程序中,看看应用程序使用了多less个“用户句柄”。 但谷歌search“如何计算用户手柄”没有帮助。

那么,有没有人遇到类似的问题? 如果是的话,你是如何debugging的?

在WinForm应用程序中有两个可能的原因

  1. 您不会在您的应用程序中主动处理Control和Form实例。 用这样的方式来解决问题比较困难,GC会清理手柄,但仍然可行。
  2. PInvoke到一个本地API,不关闭结果句柄

那将是我要检查的前两个地方。 另一个想法是直接去源,并开始调试处理泄漏。 这里有一些关于如何实现这一目标的链接。

另一个可能的原因是一些控件在OnHandleCreated或相关的HandleCreated事件中抛出一个异常。 我相信这可能会导致类似于你所看到的错误。