Invoke im Formular -> ObjectDisposedException

11/02/2009 - 16:47 von Hans Peter | Report spam
Hallo zusammen,

ich habe mit .NET 2.0 und VS 2005 ein Formular (frmMain) das wiederum ein
weiteres Formular (frmDoSomething) öffnet.

frmDoSomething führt sofort nach dem Öffnen ein asynchronen Vorgang aus
(mittels BeginInvoke), soll heißen es werden einige Daten ermittelt und
diese auch dargestellt. Die Ermittlung der Daten dauert im Schnitt 3-5
Sekunden. Nach Abschluss der Datenermittlung wird ein
"Me.Invoke(mobjShowData)" aufgerufen um die Daten entsprechend im Formular
"frmDoSomething" anzuzeigen. Soweit kein Problem.

Wenn ich jetzt allerdings das Formular jetzt (kurz) vor dem Abschluss der
Datenermittlung schließe kann es _manchmal_ passieren das ich eine
ObjectDisposedException erhalte. Diese Exception betrifft genau die Zeile
"Me.Invoke(mobjShowData)". Ich kann das Problem jetzt so lösen, indem ich
folgende Zeile davor setze:

If Me.IsHandleCreated then
Me.Invoke(mobjShowData)
End If

Bei der Lösung habe ich bis jetzt keine Probleme festgestellt.

Jetzt stellt sich mir die Frage, ob es sein kann das genau zwischen "If
Me.IsHandleCreated then" und "Me.Invoke(mobjShowData)" das Handle entfernt
werden könnte. Wenn dem so ist wie kann ich absolut sicher sein, wann ich
ein Invoke ausführen kann?

Gruß Hans
 

Lesen sie die antworten

#1 Armin Zingler
11/02/2009 - 17:44 | Warnen spam
Hans Peter wrote:
If Me.IsHandleCreated then
Me.Invoke(mobjShowData)
End If

Bei der Lösung habe ich bis jetzt keine Probleme festgestellt.

Jetzt stellt sich mir die Frage, ob es sein kann das genau zwischen
"If Me.IsHandleCreated then" und "Me.Invoke(mobjShowData)" das Handle
entfernt werden könnte. Wenn dem so ist wie kann ich absolut sicher
sein, wann ich ein Invoke ausführen kann?



Bombensicher hab ich das nur per Exceptionhandling hinbekommen. Ich hatte
auch schon den Fall - genau kann ich es "geistig" gerade nicht mehr
reproduzieren - dass das Invoke erfolgreich war (oder war es BeginInvoke?)
und wàhrend der Verarbeitung die o.g. Exception auftrat. Weiß leider nicht
mehr, in welchem Projekt das war, um nachzusehen

Oder war es nicht sogar so, dass bei einem bereits geschlossenen Formular,
Invoke sogar darauf wartet, bis das Handle erzeugt wird? (Waithandle war da
irgendwo im Spiel) Ach ja, man wird alt...


Armin

Ähnliche fragen