我有一个在类级别声明的对象,它给出了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()'未沿所有异常路径放置。在对所有引用超出范围之前,调用System.IDisposable.Dispose对象'new OpenFileDialog()'。
答案 0 :(得分: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-Pattern
作为旁注:看来你的混合WPF和Windows Forms。您继承自Window
(我认为System.Windows.Window
,因为您的问题被标记为wpf),但请尝试使用System.Windows.Forms.OpenFileDialog
。
混合使用这两个UI框架并不是一个好主意。请改用Microsoft.Win32.OpenFileDialog
。