2009-12-02 6 views
0

J'ai créé une application Windows .net 2.0. Cette application crée des contrôles de formulaire dynamiquement. Maintenant, quand j'essaye d'exécuter l'application, il lance une exception "Erreur dans la création de Windows handle". Après cela, l'application se bloque et rien ne se passe. À la première fois, le formulaire s'affiche correctement. Sur un événement particulier, j'essaie de recharger le même formulaire, alors que cette fois, je reçois cette exception. Tout le monde sait comment s'en débarrasser. Toute sorte d'aide serait bien complète :)Erreur lors de la création de Windows handle

+0

Postez votre code. 'Sur un événement particulier, j'essaie de recharger le même formulaire, alors que cette fois je reçois cette exception. 'On dirait que vous faites quelque chose de mal dans un gestionnaire d'événements. –

Répondre

0

J'ai récemment rencontré un problème comme celui-ci.

Il y a une limite par processus de seulement 10.000 poignées - facile à atteindre si vous créez dynamiquement une interface utilisateur complexe. Pour vérifier si cela vous arrive, utilisez le Gestionnaire des tâches - allez dans l'onglet Processus, activez les colonnes "Objets utilisateur" et "Objets GDI". Ensuite, reproduisez le problème.

Dans mon cas, le nombre d'objets USER atteignait exactement 10 000, puis "boom".

Si c'est ce qui se passe pour vous, vous devez vous assurer que les anciens contrôles sont correctement éliminés avant de créer un nouveau formulaire. Vous devrez peut-être revoir la conception pour utiliser moins de poignées - c'est ce que je devais faire.

+0

Salut Bevan, Merci pour la réponse. J'ai vérifié mon code et comme vous l'avez dit, tous les contrôles n'étaient pas correctement éliminés. Je jetais une exception pour SplitterControl que j'utilise sur mon formulaire. Et par conséquent, c'était briser le flux. Maintenant, ce que je fais est, je suis juste en train de rassembler tous les contrôles dans un objet de collection et en disposant chacun d'eux avec force. Cela fonctionne très bien, mais comme la forme est disposée par sa méthode(), je ne suis pas sûr si c'est la façon optimale de disposer des contrôles. –

+0

Vous devez vous assurer que vous ne finissez pas par disposer des contrôles deux fois; Je suggère d'utiliser Reflector pour vérifier le code de 'Control' pour voir si sa méthode' Dispose() 'empêche cela en supprimant le contrôle du formulaire. – Bevan