C# 偶尔出现的奇怪异常无法在WinForms UI上重现这些步骤

C# 偶尔出现的奇怪异常无法在WinForms UI上重现这些步骤,c#,.net,winforms,C#,.net,Winforms,我无法在development Environment中复制它,尽管它不时出现在最终用户界面上。 我知道这可能有点过于笼统和模糊,但是如果您遇到这样的异常,潜在的原因是什么?从我所看到的,当您试图显示错误处理对话框时,这是一个异常。可能,应用程序有许多表单由用户打开,但不一定要正确关闭和处理。这样的事情很难重现,因为开发人员和QA人员通常不会像最终用户那样使用应用程序。看看,这种例外情况有几种可能。但是如果它是间歇性的,那么实际上只有一个。您的代码正在泄漏窗口句柄。一个程序最多可以分配10000

我无法在development Environment中复制它,尽管它不时出现在最终用户界面上。
我知道这可能有点过于笼统和模糊,但是如果您遇到这样的异常,潜在的原因是什么?

从我所看到的,当您试图显示错误处理对话框时,这是一个异常。

可能,应用程序有许多表单由用户打开,但不一定要正确关闭和处理。这样的事情很难重现,因为开发人员和QA人员通常不会像最终用户那样使用应用程序。

看看,这种例外情况有几种可能。但是如果它是间歇性的,那么实际上只有一个。您的代码正在泄漏窗口句柄。一个程序最多可以分配10000个,然后Windows就会拔掉插头,拒绝再创建

很难纠正,因为像这样的泄漏需要一段时间才能达到限额。但从Taskmgr.exe中很容易观察到。单击流程选项卡,查看并选择列,然后勾选“用户对象”。运行程序时请注意此数字。每次你的应用程序创建一个新表单或控件时,它都会增加一个。当你关闭一张表格时,应该会下降

不幸的是,很容易犯一个导致这种泄漏的错误。当您从窗体中删除控件而不调用其Dispose()方法时,就会发生这种情况。或调用Controls.Clear()而不首先处理控件。像这样删除的控件临时位于“停车窗口”上。其目的是使其能够存活足够长的时间,以便您将其移动到另一个容器中。如果不发生这种情况,则控件的窗口句柄将永久泄漏

Exception type: System.ComponentModel.Win32Exception
Exception message: Error creating window handle.