2012-02-19 11 views
5

Nel codice seguente, i blocchi utilizzati sono ridondanti o sono necessari per il rilascio completo delle risorse?È ridondante avvolgere i dialoghi nell'utilizzo dei blocchi?

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

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

Il secondo esempio apre un modulo non modale, pertanto il codice viene chiuso immediatamente e il modulo verrà chiuso. – Steve

+0

Non è del tutto fuori dall'ordinario non fare nulla e mantenere il modulo intorno a ShowDialog() di nuovo. A SearchFroms per esempio. –

risposta

6

Il primo esempio non è ridondante. Dovresti sempre disporre di un IDisposable nel momento in cui hai finito e nel caso di un modulo modale questo esattamente raggiunge l'obiettivo.

Il secondo esempio tuttavia porterà ad errori. Il metodo Show restituisce immediatamente e il modulo continua a essere visualizzato. Tuttavia il codice using generato sarà immediatamente Dispose il modulo e causerà la sua scomparsa. Il modulo deve essere eliminato una volta terminata la visualizzazione.

+2

Aggiunta minore per l'OP: quando si usa ShowDialog, esso non si espone esplicitamente; quando usi Show, lo fa esplicitamente (quando chiuso) –

+0

Il metodo Close() di Form chiama Dispose()? Perché se è il caso, non sarà il modulo già disposto al termine di ShowDialog? (o tramite una chiamata a Chiudi nel modulo o da un utente fai clic sulla X) – asmo

+0

@asmo vedi il commento di Marc per quello. – JaredPar

Problemi correlati