Pertanyaan CA2000: objek tidak dibuang di sepanjang semua jalur pengecualian


Meskipun topik telah dibahas di sini sebelumnya, tetapi solusi yang diusulkan tampaknya tidak berhasil ..

Saya memiliki metode button-click-callback dalam aplikasi formulir saya, yang menunjukkan dialog pemilih folder:

private void ButtonSelectReporterFolderClick(object sender, EventArgs e)
{
    using (var dialog = new FolderBrowserDialog()) // causes warning
    {
        if (dialog.ShowDialog() == DialogResult.OK)
        {
            this.boxReporterFolderPath.Text = dialog.SelectedPath;
        }
    }
}

Ini menghasilkan peringatan:

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.

Saya juga mencoba menggunakan try-finally blokir atau bahkan memanggil dialog. Tangani tanpa blok, semua tidak ada gunanya - peringatan tetap ada, selalu pada baris inisialisasi.


7
2017-07-22 11:11


asal


Jawaban:


Peringatan ini bukan karena FolderBrowserDialog tidak dibuang, itu karena memiliki beberapa anggota publik yang mengimplementasikan antarmuka IDisposable dan Anda tidak membuangnya secara terpisah. Tentu saja, objek FolderBrowserDialog tahu bagaimana cara membuang dependensi itu tetapi FxCop tidak memiliki cara untuk mengetahui itu sehingga memberikan peringatan. Abaikan saja peringatan dalam kasus Anda.


5
2017-07-22 11:16