C# 确保宪兵和WinForm的地方自治

C# 确保宪兵和WinForm的地方自治,c#,winforms,gendarme,C#,Winforms,Gendarme,当我的代码与规则不兼容时,我遇到了规则EnsureLocalDisposalRule的问题 代码示例: Form myForm = new myForm { MdiParent = this }; myForm .Show(); using (Form myForm = new myForm { MdiParent = this }) { myForm .Show(); } 这是规则,我这样纠正它 代码示例: Form myForm = new myForm { MdiParent =

当我的代码与规则不兼容时,我遇到了规则EnsureLocalDisposalRule的问题

代码示例:

Form myForm = new myForm { MdiParent = this };
myForm .Show();
using (Form myForm = new myForm { MdiParent = this })
{
   myForm .Show();
}
这是规则,我这样纠正它

代码示例:

Form myForm = new myForm { MdiParent = this };
myForm .Show();
using (Form myForm = new myForm { MdiParent = this })
{
   myForm .Show();
}
但是我的工作代码有问题,因为在上述更正之后,我的
WinForm对象
立即被销毁


如何修复规则并使代码正常工作?

大多数静态分析工具都有一个明显的缺陷——它们只处理一般模式,并且通常不会处理规则的所有“有效”异常。静态分析规则引擎中内置的规则几乎总是存在有效的例外情况

在这种情况下,您不能(也不应该)在使用
.Show()
时处理表单。表单关闭后将被正确处理。在这种情况下,这实际上是一个“错误”错误


在这种情况下,您应该忽略此特定错误,因为它是假阳性。

下面的更改将起作用

myForm.显示对话框()

由于它打开“窗体为模型”对话框,因此将停止程序执行