2011-11-01 7 views
0

J'ai une option de menu de déconnexion dans mon application MDI. Une fois déconnecté, je souhaite fermer tous les formulaires ouverts. Actuellement, j'utilise l'extrait de code suivant pour y parvenir;pourquoi il ne lance pas "La collection a été modifiée, l'opération d'énumération peut ne pas s'exécuter" exception

For Each f As Form In My.Application.OpenForms 
    If f.Name = Me.Name Then 
     For Each child As Form In f.MdiChildren 
      child.Close() 
     Next 
    Else 
     f.Close() 
    End If 
Next 

Il fonctionne parfaitement dans mon environnement de test, même si je m'y attendais Pour chaque boucle jetteront « Collection a été modifiée, l'opération d'énumération ne peut pas exécuter » exception. puisque sur chaque enfant forment des appels Close(), la collection f.MdiChidren est modifiée, cela m'a beaucoup surpris. Quelqu'un peut-il me dire pourquoi il ne lance pas cette exception?

Cependant, il lance "Collection a été modifiée, l'opération d'énumération peut ne pas s'exécuter" dans un système client.

+0

Il semble que la collection ne soit pas modifiée dans votre environnement de test. Le correctif pour l'environnement en direct serait d'ajouter d'abord des formulaires à une liste séparée et de boucler cette liste en les fermant. – JonAlb

+0

MdiChildren renvoie un * tableau *, pas une collection. Vous n'êtes pas près de diagnostiquer le plantage de votre utilisateur. –

+0

@JonAlb: Je ne pense pas que ce soit le cas, j'ai utilisé le point de rupture et vérifié que la taille de la collection enfant est réduite à chaque itération. – Riju

Répondre

0

Si vous utilisez un système d'exploitation 64 bits, cela peut être lié à cela. J'ai eu des problèmes avec cela dans le passé, le travail autour de nous avait trouvé était de définir la cible du projet à x86 (Lorsque possible).

Voici un post qui a une réponse qui a une bonne explication du problème dont je parle.

VS2008 Debugger does not break on unhandled exception

Je dois mentionner que je l'ai encore vu en 2010 aussi.

Questions connexes