2010-01-11 13 views

Respuesta

13

Con Show, sí lo es (al final de WmClose). Con ShowDialog, no, no lo es. ;-P diversión

Para ShowDialog, see MSDN:

Debido a una forma que se muestra como un cuadro de diálogo no está cerrada, se debe llamar al método Dispose del formulario cuando el formulario ya no es necesario para su aplicación .

que lo demuestran, sin embargo:

Form main = new Form(); 
Form test = new Form(); 
test.Text = "Close me"; 
test.Disposed += delegate { 
    main.Text = "Second form was disposed"; 
}; 
main.Shown += delegate { 
    test.Show(); 
}; 
Application.Run(main); 
+0

Wow No sabía esto. ¿Puede haber pérdidas de memoria debido a esto? – pdiddy

+0

¿De no deshacerse de los formularios que se muestran con 'ShowDialog'? Bueno, probablemente no una * fuga *, pero podría tomar más tiempo (GC) para limpiar los controladores de ventanas subyacentes. –

+0

Descubrí una fuga solo por no deshacerse de un formulario ShowDialog'ed. .Dispose no se llamó, lo que significaba que los controles en el formulario nunca se eliminaron, lo que significaba que uno de los controles no se anulaba el registro de un controlador SystemEvents. Entonces, el control nunca se eliminó porque estaba suscrito a un evento (y ese evento vivió para el alcance de la aplicación), el control tenía nuevamente una referencia a su Formulario, impidiendo que toda la forma y todo lo que contiene nunca recibiera GC – Anonym

Cuestiones relacionadas