Thomas Woelfers Baustatik Blog

Baustatik-Software und was sonst des Weges kommt

Auch nicht schön: WindowsFormsParkingWindow

Ist mir vorhin im Visual Studio 2003 'aufgefallen' - nachdem ich ungefähr eine Stunde lang auf meiner Seite nach einem Fehler gesucht habe: Man kann einen Fall erzeugen, bei dem der Wechsel aus der eigenen Anwendung und wieder zurück (per Alt-Tab) dazu führt das die eigenen Anwendung sofort einfriert.

Wer auch so ein Problem hat, der schaut besser einmal kurz in die Taskliste und sucht nach einem WindowsFormsParkingWindow:

Dazu gehört ein unsichtbares Fenster, das man natürlich auch sichtbar machen kann (Spy++ ist dabei das Tool der Wahl). Sichtbar sieht das Ding (beim mir) wie folgt aus:

Und warum bringt das Ding nun die eigene Anwendung zum einfrieren? So ganz im klaren bin ich mir nicht - ich denke aber folgendes erklärt die Sache eingermassen:

Wenn man ein Kontroll-Element von einer Form entfernt, dann wird dieses Control eben im WindowsFormsParkingWindow untergebracht. Sinn der Sache ist wohl, das man das Control dadurch hinterher wieder einfach relativ leicht wiederverwenden kann - falls man es nämlich wieder auf einer Form einfügt.

Das Problem: Wenn das Control Focus hat während es auf die andere Form transferiert wird, dann verbleibt der Focus bei diesem Control. Dummerweise ist die neue 'Parent' Form eben das WindowsFormsParkingWindow - und das ist unsichtbar. Es gibt also keine Events mehr: Die Anwendung ist dann tot.

Lösung: Vor dem entfernen des Controls den Focus auf ein anderes Control - zum Beispiel das Parent des Controls - setzen.

Es wäre natürlich schön gewesen, wenn man bei Microsoft irgendwas zum Thema hätte finden können. Man bekommt aber das hier.

Comments (1) -

  • zheka

    12/21/2005 1:10:19 PM |

    Vielen Dank für diesen Artikel.
    Ich habe 3 Tage damit verbracht, nach dem Grund des Fehlers zu suchen, zumal es nur auf dem Kundenrechner ( Win XP, .Net 1.1 SP 0, zwei Prozessoren ) auftrat. Auf der Entwicklungsmaschine ( Win XP, .Net 1.1 SP 1, single prozessor ) lief es dagegen ohne Problemme.

Comments are closed