c#: Win32Exception: Fehler beim Erstellen des Fensterhandles
Wann tritt diese Exception auf? – Wenn zu viele Steuerelemente erstellt und nicht wieder aufgeräumt wurden.
Beispiel
View Code CSHARP
1 2 3 4 5 6 7 8 9 10 11 12 | public partial class Form1 : Form { void ForceException() { while (true) { Label l = new Label(); this.Controls.Add(l); this.Controls.Clear(); } } } |
Bei jedem Schleifendurchlauf wird ein neues Label erstellt. mit this.Controls.Clear(); wird das Label zwar entfernt, aber das Fenster-Handle des Labels existiert weiterhin. Da jeder Prozess nur begrenzt viele Fenster-Handles haben kann sind diese irgendwann aufgebraucht.
Abhilfe
View Code CSHARP
1 2 3 4 5 6 7 8 9 10 11 12 13 | public partial class Form1 : Form { void ForceException() { while (true) { Label l = new Label(); this.Controls.Add(l); this.Controls.Clear(); l.Dispose(); } } } |
Mit l.Dispose(); werden alle Ressourcen, die das Label reserviert hatte freigegeben. Damit wird auch das Fenster-Handle wieder frei und kann später wieder verwendet werden. Die obige while-Schleife läuft beliebig lange ohne Fehler.