0

我有一个在类级别声明的对象,它发出 CA2000 警告。如何从下面的代码中消除 CA2000 警告?

public partial class someclass : Window
{
    System.Windows.Forms.OpenFileDialog dlg = new System.Windows.Forms.OpenFileDialog()
    {
        AddExtension = true,
        CheckFileExists = true,
        CheckPathExists = true,
        DefaultExt = "xsd",
        FileName = lastFileName,
        Filter = "XML Schema Definitions (*.xsd)|*.xsd|All Files (*.*)|*.*",
        InitialDirectory = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop),
        RestoreDirectory = true,
        Title = "Open an XML Schema Definition File"
    };
}

警告是 - 警告 CA2000 在方法“SIMPathFinder.SIMPathFinder()”中,对象“new OpenFileDialog()”未沿所有异常路径处理。在对对象“new OpenFileDialog()”的所有引用超出范围之前调用 System.IDisposable.Dispose。

4

1 回答 1

0

CA2000表示您的类实例拥有一个一次性对象,该对象应在您的类实例超出范围之前释放以释放使用过的(非托管)资源。

执行此操作的常见模式是实现IDisposable接口和protected virtual Dispose方法:

public partial class someclass : Window, IDisposable // implement IDisposable
{
    // shortened for brevity
    System.Windows.Forms.OpenFileDialog dlg = new System.Windows.Forms.OpenFileDialog();

    protected virtual void Dispose(bool disposing)
    {
        if (disposing)
            dlg.Dispose(); // dispose the dialog
    }

    public void Dispose() // IDisposable implementation
    {
        Dispose(true);
        // tell the GC that there's no need for a finalizer call
        GC.SuppressFinalize(this); 

    }
}

阅读有关Dispose 模式的更多信息


附带说明:您似乎混合了 WPF 和 Windows 窗体。您继承自Window(我认为这是System.Windows.Window因为您的问题被标记为),但尝试使用System.Windows.Forms.OpenFileDialog.
混合这两个 UI 框架并不是一个好主意。改为使用Microsoft.Win32.OpenFileDialog

于 2017-03-01T18:14:53.803 回答