Saya baru mengenal C #, dan saya mencoba untuk melihat posting sebelumnya tetapi tidak menemukan jawaban yang baik.
Dalam Aplikasi Formulir C # Windows dengan bentuk tunggal, apakah menggunakan Form.Close()
lebih baik atau Form.Dispose()
?
MSDN mengatakan bahwa semua sumber daya dalam objek ditutup dan formulir dibuang saat Tutup dipanggil. Terlepas dari itu, saya telah menemukan beberapa contoh online yang mengikuti Buang daripada Tutup.
Apakah yang satu memiliki keunggulan dibandingkan yang lain? Dalam skenario apa kita harus memilih salah satu dari yang lain?
form.Visible = false;
Anda dapat meneleponform.Hide()
. Sebenarnya,form.Hide()
cukup setthis.Visible = false;
.Jawaban:
Ini forum di MSDN memberitahu Anda.
sumber
Sebagai aturan umum, saya selalu menganjurkan secara eksplisit memanggil metode Dispose untuk setiap kelas yang menawarkannya, baik dengan memanggil metode secara langsung atau membungkus dalam blok "menggunakan".
Paling sering, kelas yang mengimplementasikan IDisposible melakukannya karena mereka membungkus beberapa sumber daya tak terkelola yang perlu dibebaskan. Meskipun kelas-kelas ini harus memiliki finalisator yang bertindak sebagai pengaman, memanggil Dispose akan membantu membebaskan memori itu lebih awal dan dengan overhead yang lebih rendah.
Dalam kasus objek Formulir, seperti yang dicatat oleh tautan dari Kyra, metode Tutup didokumentasikan untuk menjalankan Buang atas nama Anda sehingga Anda tidak perlu melakukannya secara eksplisit. Namun, bagi saya, itu selalu terasa seperti mengandalkan detail implementasi. Saya lebih suka untuk selalu memanggil Close dan Dispose untuk kelas yang mengimplementasikannya, untuk menjaga dari perubahan / kesalahan implementasi dan agar jelas. Metode Buang yang diterapkan dengan benar harus aman untuk dipanggil beberapa kali.
sumber
Tidak menelepon
Close
mungkin bypass mengirim banyak pesan Win32 yang menurut orang agak penting meskipun saya tidak bisa secara khusus memberi tahu Anda mengapa ...Close
memiliki keuntungan untuk mengangkat acara (yang dapat dibatalkan) sedemikian rupa sehingga orang luar (dalam bentuk) dapat menontonFormClosing
danFormClosed
untuk bereaksi sesuai.Saya tidak jelas apakah
FormClosing
dan / atauFormClosed
dibesarkan jika Anda hanya membuang formulir tetapi saya akan menyerahkannya kepada Anda untuk bereksperimen.sumber
Menggunakan
using
adalah cara yang cukup bagus:using (MyForm foo = new MyForm()) { if (foo.ShowDialog() == DialogResult.OK) { // your code } }
sumber
Close () - sumber daya yang dikelola dapat ditutup sementara dan dapat dibuka sekali lagi.
Dispose () - secara permanen menghapus sumber daya yang dikelola atau tidak dikelola
sumber
ShowDialog()
. Jika tidak,Close()
formulir juga akan dibuang.Jika Anda menggunakan form.close () dalam formulir Anda dan menyetel Peristiwa Penutupan Formulir dari formulir Anda dan baik menggunakan form.close () dalam Peristiwa ini, Anda berada dalam putaran tak terbatas dan Argumen di luar rentang terjadi dan solusinya adalah mengubah bentuk .close () dengan form.dispose () di Acara FormClosing. Saya harap tip kecil ini membantu Anda !!!
sumber
Apa yang saya baru saja bereksperimen dengan alat diagnostik VS adalah saya menyebutnya this.Close () kemudian peristiwa formclosing dipicu. Kemudian Ketika saya memanggil this.Dispose () di akhir acara Formclosing di mana saya membuang banyak objek lain di dalamnya, itu membersihkan semuanya jauh lebih halus.
sumber