2012-02-19 20 views
5

En el siguiente código, ¿los bloques en uso son redundantes o son necesarios para liberar completamente los recursos?¿Es redundante envolver diálogos en el uso de bloques?

using (var dialog = new AboutBox()) 
    dialog.ShowDialog(); 

using (var form = new OptionForm()) 
    form.Show(); 
+2

Su segundo ejemplo abre un formulario no modal, por lo que su código se cierra inmediatamente y su formulario se cerrará. – Steve

+0

No es totalmente fuera de lo normal no hacer nada y mantener el formulario alrededor de ShowDialog() de nuevo. Un SearchFroms por ejemplo. –

Respuesta

6

El primer ejemplo no es redundante. Siempre debe deshacerse de un IDisposable en el momento en que termine de usarlo y, en el caso de una forma modal, esto logra exactamente el objetivo.

El segundo ejemplo generará errores. El método Show regresa inmediatamente y el formulario continúa mostrándose. Sin embargo, el código generado using llamará inmediatamente al Dispose y lo hará desaparecer. La forma solo se debe eliminar una vez que se termine de mostrar.

+2

Adicional adicional para el OP: cuando se usa ShowDialog explícitamente no se elimina; cuando se usa Show, explícitamente lo hace (cuando se cierra) –

+0

¿El método Close() de Form calling Dispose()? Porque si es el caso, ¿no será la forma ya eliminada una vez que finalice ShowDialog? (ya sea por una llamada a Cerrar en el formulario o por un usuario, haga clic en la X) – asmo

+0

@asmo vea el comentario de Marc para eso. – JaredPar

Cuestiones relacionadas