2011-07-22 59 views
7

对象未设置虽然主题已经在这里讨论过,但提出的解决方案似乎不工作..CA2000:沿着所有的异常路径

我有一个按钮,点击回调方法在我的表格提出申请,显示一个文件夹选择对话框:

private void ButtonSelectReporterFolderClick(object sender, EventArgs e) 
{ 
    using (var dialog = new FolderBrowserDialog()) // causes warning 
    { 
     if (dialog.ShowDialog() == DialogResult.OK) 
     { 
      this.boxReporterFolderPath.Text = dialog.SelectedPath; 
     } 
    } 
} 

这会产生一个警告:

CA2000: Microsoft.Reliability : In method 'MainWindow.ButtonSelectReporterFolderClick(object, EventArgs)', object '<>g__initLocal' is not disposed along all exception paths. Call System.IDisposable.Dispose on object '<>g__initLocal' before all references to it are out of scope.

我用也尝试- finally块或甚至调用dialog.Dispose没有任何块,都无济于事 - 警告仍然存在,始终在初始化的行。

+0

对不起,但我无法重现上述代码的CA2000警告。你确定它不是由其他东西引起的吗? –

+0

不,我希望..你在适当的Windows窗体应用程序回调中运行它吗? – Efrain

+0

即使将它作为按钮在香草Windows窗体可执行文件中的vanilla Windows窗体中单击事件处理程序时,我在该方法中也看不到CA2000违例。如果您将最低“repro”代码添加到新的Windows Forms应用程序,您是否看到违规行为? –

回答

5

这个警告并不是因为FolderBrowserDialog不处理,这是因为它有一些公共成员实现了IDisposable接口,并且你不会单独处置它们。当然,FolderBrowserDialog对象知道如何处置它的依赖关系,但FxCop无法知道它是如何发出警告的。只是忽略你的情况下的警告。

+1

so ..基本上FolderBrowserDialog不符合CA2000? O_o – Efrain

+1

实际上,其他一些控件也会发生同样的情况,对于FolderBrowserDialog没什么特别的。 (它总是发生在字体对象,图像控制等等) –

+2

更多的情况是CA2000几乎没用。它会产生很多误报,导致真正的警告消失在噪音中。 – LukeH