7

尽管之前已在此处讨论过主题,但建议的解决方案似乎不起作用..

我的表单应用程序中有一个按钮单击回调方法,它显示了一个文件夹选择器对话框:

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.

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

4

1 回答 1

5

警告不是因为未释放 FolderBrowserDialog,而是因为它有一些实现 IDisposable 接口的公共成员,而您没有单独释放它们。当然,FolderBrowserDialog 对象知道如何处理它的依赖项,但 FxCop 无法知道这一点,因此它会发出警告。在你的情况下忽略警告。

于 2011-07-22T11:16:44.383 回答