Dispose bei Formularen/Dialoge

21/07/2009 - 11:12 von Uwe Weih | Report spam
Hallo,

angenommen ich nutze ein Dialog zum Öffnen eines Files, erzeuge ich zuerst
ein Objekt :

Dim ofd As New Windows.Forms.OpenFileDialog

Nach Zuweisung der Eigenschaften folgt dann:

If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
Variable = ofd.FileName
Else
'Das war wohl nichts...
End If

Und hier frage ich mich, ob das immer am Ende folgen muss:

ofd.Dispose()

Denn auch ohne kann ich zigmal im Quellcode die Sub aufrufen, die mit einem
Handles ausgestattet ist und ein neues Objekt ofd erzeugen. Wie sieht das
mit "Dispose" aus?

Oder das Objekt mit (ofd = nothing) setzen?

Ciao

Uwe
 

Lesen sie die antworten

#1 Armin Zingler
21/07/2009 - 13:01 | Warnen spam
Uwe Weih schrieb:
Hallo,

angenommen ich nutze ein Dialog zum Öffnen eines Files, erzeuge ich zuerst
ein Objekt :

Dim ofd As New Windows.Forms.OpenFileDialog

Nach Zuweisung der Eigenschaften folgt dann:

If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
Variable = ofd.FileName
Else
'Das war wohl nichts...
End If

Und hier frage ich mich, ob das immer am Ende folgen muss:

ofd.Dispose()



Ja, sollte man machen. Ansonsten bleiben die Ressourcen unnötig
reserviert bis der Müllsammler das Objekt zerstört und dabei Dispose
aufgerufen wird. Auch wenn das Weglassen des expliziten Aufrufs durch
deinen Code in dem Fall höchst unwahrscheinlich zu kritischer
Ressourcenverknappung führt, aber da würde ich gar nicht darüber
nachdenken sondern es einfach machen.

Denn auch ohne kann ich zigmal im Quellcode die Sub aufrufen, die mit einem
Handles ausgestattet ist und ein neues Objekt ofd erzeugen. Wie sieht das
mit "Dispose" aus?



Ist das mit <s.o.> beantwortet? So viele Dialoge kannst du gar nicht
aufrufen, dass es zu einem Problem wird. :) Obwohl... habe gerade kein
VB zur Hand. Versuch's doch mal in einer Endlosschleife und teste den
Unterschied (wahrscheinlich Dialog sofort per Timer schliessen).

Oder das Objekt mit (ofd = nothing) setzen?



Nö. Die Variable, da lokal, wird doch eh zerstört.


Armin

Ähnliche fragen