2017-03-01 100 views
0

我有一個對象是在給出CA2000警告的類級別聲明的。我如何擺脫下面代碼中的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" 
    }; 
} 

該警告是 - ')的新的OpenFileDialog(' 警告CA2000在方法 'SIMPathFinder.SIMPathFinder()',對象不被沿所有的異常路徑設置。調用System.IDisposable.Dispose對象的新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窗體。您從Window繼承(我認爲這是System.Windows.Window,因爲您的問題標記爲),但請嘗試使用System.Windows.Forms.OpenFileDialog
混合這兩個UI框架不是一個好主意。改爲使用Microsoft.Win32.OpenFileDialog

+0

當你所做的只是處理子對象時,沒有必要實現終結器(你忽略了,但我猜它仍然存在,因爲GC.SuppressFinalize(this))。 – Evk

相關問題