R
Rainer Hocker
Hallo!
Ich habe eine Applikation, bei der der Anwender verschiedene Fenster gezeigt
bekommt. Da das alles mit einem TabControl zu unübersichtlich geworden wäre,
hab ich einfach ein großes Main-Form genommen und alle Unterfenster als
UserControls gestaltet. Diese werden bei bedarf über das Menü geladen,
angezeigt und beim Betätigen eines Schließen-Buttons werden sie wieder
entladen (this.Dispose()).
Jetzt habe ich festgestellt, dass dieses Entladen scheinbar nicht
funktioniert. Es blieben immer noch Teile der Controls am Leben. Zuerst ist
mir das an einem Timer aufgefallen, der einfach im entladenen UserControl
weitergelaufen ist. Wenn er sein tick-Event feuert, greift der Code dort
aber auf die Controls zu, die mit dem UserControl schon längst entladen
sind.
Also hab ich entsprechende try/catch-Anweisungen eingeführt, in denen ich
auf ObjectDisposed abfange.
Jetzt hab ich gesehen, dass auch sonstige Events, die irgendwo gefeuert
werden, wieder zum Reaktivieren des schon entladenen Controls führen. Z.B.
hab ich in einem UserControl ein InputPanel mit dem Event "Eanabled"
abgefragt. Wenn ich jetzt das InputPanel irgendwo im ProgrammContext
aufrufe, wird auch die Eventroutine im schon entladenen UserControl wieder
angesprochen.
Meine Frage: Wie gehe ich denn sauber mit dem Problem um? Wie kann ich denn
das UserControl wirklich sauber entladen? Muss ich da den GarbageColector
noch per Hand anschubsen? Oder hab ich ein generelles Architekturproblem,
weil UserControls nicht dynamisch ge-/entladen werden sollten? Oder ist das
eine Macke des Compact-Frameworks?
Danke!!!
Ich habe eine Applikation, bei der der Anwender verschiedene Fenster gezeigt
bekommt. Da das alles mit einem TabControl zu unübersichtlich geworden wäre,
hab ich einfach ein großes Main-Form genommen und alle Unterfenster als
UserControls gestaltet. Diese werden bei bedarf über das Menü geladen,
angezeigt und beim Betätigen eines Schließen-Buttons werden sie wieder
entladen (this.Dispose()).
Jetzt habe ich festgestellt, dass dieses Entladen scheinbar nicht
funktioniert. Es blieben immer noch Teile der Controls am Leben. Zuerst ist
mir das an einem Timer aufgefallen, der einfach im entladenen UserControl
weitergelaufen ist. Wenn er sein tick-Event feuert, greift der Code dort
aber auf die Controls zu, die mit dem UserControl schon längst entladen
sind.
Also hab ich entsprechende try/catch-Anweisungen eingeführt, in denen ich
auf ObjectDisposed abfange.
Jetzt hab ich gesehen, dass auch sonstige Events, die irgendwo gefeuert
werden, wieder zum Reaktivieren des schon entladenen Controls führen. Z.B.
hab ich in einem UserControl ein InputPanel mit dem Event "Eanabled"
abgefragt. Wenn ich jetzt das InputPanel irgendwo im ProgrammContext
aufrufe, wird auch die Eventroutine im schon entladenen UserControl wieder
angesprochen.
Meine Frage: Wie gehe ich denn sauber mit dem Problem um? Wie kann ich denn
das UserControl wirklich sauber entladen? Muss ich da den GarbageColector
noch per Hand anschubsen? Oder hab ich ein generelles Architekturproblem,
weil UserControls nicht dynamisch ge-/entladen werden sollten? Oder ist das
eine Macke des Compact-Frameworks?
Danke!!!