我有一个在类级别声明的对象,该对象发出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"
};
}
方法" simpathfinder.simpathfinder(),对象'new openfiledialog()'在所有例外路径上都没有处理。在对象上所有引用之前,请在对象" new OpenFileDialog()"上call system.idisposable.dispose。
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表单。您从Window
继承(我认为是System.Windows.Window
,因为您的问题被标记为WPF),但请尝试使用System.Windows.Forms.OpenFileDialog
。
混合这两个UI框架不是一个好主意。改用Microsoft.Win32.OpenFileDialog
。