In noob speak, Dispose() riguarda la pulizia dopo aver finito di utilizzare una risorsa non gestita.
Che cos'è una risorsa non gestita? Sono tutto ciò che CLR non gestisce per te. Sono cose come handle di file, connessioni al database, socket di rete, penne GDI +, ecc. Si ottiene l'accesso a queste cose tramite un tipico oggetto .NET, ma implementerà IDisposable, per consentire di ripulire correttamente.
Perché pulire? Fino a quando non hai ripulito te stesso, quella risorsa non è disponibile per altre parti del programma. In questo senso, stai rompendo le cose, perché stai hogging su una risorsa.
Perché farlo da soli? Dovresti farlo da solo non appena smetti di aver bisogno della risorsa, piuttosto che affidarti alla magia automatica del garbage collector, perché potrebbe richiedere una lunga (ben, non specificata) quantità di tempo prima che il garbage collector arrivi ad esso. Finché un oggetto non è stato smaltito correttamente, non è possibile riutilizzare la risorsa sottostante, quindi il programma non funzionerà in modo affidabile.
Questo ha bisogno di un'altra regola: do * not * dispose un oggetto che non hai creato. Smaltire e.Graphics è un brutto bug latente. –
Solo una nota per 'Graphics' in particolare, se è stata eliminata chiamando i suoi metodi' Draw ... 'darà un' InvalidArgumentException' con il messaggio 'il parametro non è valido' - non 'ObjectDisposedException'. –