2010-03-24 3 views
3

J'ai un contrôle graphique multithread. Jusqu'à présent, cela fonctionnait bien, mais je remarquais que chaque fois que je suis sur mon application montrant ce contrôle, il se passe ce qui suit: si je bloque et déverrouille mon poste de travail, il gèle, comme s'il s'agissait d'une sorte de boucle infinie .C# .NET: Un contrôle graphique bloque mon application après le déverrouillage du poste de travail

Encore plus étrange, ce bogue se produit uniquement lorsque je ne lance pas l'application à partir de Visual Studio et qu'elle n'est pas connectée à celle-ci.

Quelqu'un at-il une idée de ce qui se passe? Par exemple, si j'attache Visual Studio à l'application déjà gelée, puis-je voir les lignes de code que mes threads exécutent?

Toute aide sera appréciée!

Répondre

1

Nous avons récemment eu (pour environ un an et demi;) ce même problème. Il se déclenche aussi parfois lorsque IE vide les caches, lorsque vous changez les couleurs de votre thème.

Le problème était que nous avions un écran de démarrage qui avait sa fenêtre créée sur un thread, puis il a été montré (ShowDialog()) dans l'autre thread. Une fois que nous avons déplacé la création de la fenêtre dans le même thread qui l'affiche réellement, elle a repris. Il y avait aussi quelques changements avec .Dispose(): dans la fenêtre splash, et ils pouvaient aussi avoir un effet.

Microsoft a un article à ce sujet et ils suggèrent essentiellement à run their Spy++ program and look at your program when it's hung. Il y a une fenêtre "Windows", recherchez votre application et recherchez toutes les fenêtres qui ne devraient pas être là. Ils ont peut-être une pompe à messages Windows active/attachée mais elle ne pompe pas. Le message "change" n'est pas traité et toutes les fenêtres .NET se bloquent -> se bloquer.

+0

Merci beaucoup pour votre réponse, je pense que ce sera très utile. – leo

+1

@leo: trouvé le lien, j'espère que ça aide; C'était un problème tellement ennuyeux. –

0

suffit de joindre VS à l'application gelée et appuyez sur le bouton Pause, VS affichera le code d'exécution.

+0

Je l'ai déjà fait, mais tous les threads sont en train de ne rien faire. – leo

Questions connexes