Problème d'attente

Signaler
Messages postés
213
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
1 avril 2009
-
Messages postés
5
Date d'inscription
lundi 1 janvier 2018
Statut
Membre
Dernière intervention
23 juillet 2020
-
bonsoir, mon application qui tourne sur csharp sarrête a chaque que je le lance et me donne le message suivant:



Le CLR n'a pas pu effectuer de transition du contexte COM 0x1a0f40 au contexte COM 0x1a10b0 pendant 60 secondes. Le thread qui possède le contexte/cloisonnement de destination est probablement en train d'attendre ou de traiter une opération très longue sans pompage des messages Windows. Cette situation a généralement des effets négatifs sur les performances et peut parfois entraîner le blocage de l'application ou une utilisation ininterrompue de la mémoire. Pour éviter ce problème, tous les threads STA (Single Threaded Apartment) doivent utiliser des primitives d'attente de pompage (par exemple CoWaitForMultipleHandles) et pomper de manière régulière les messages lors des opérations qui sont longues à s'exécuter.

je voudrais savoir comment resoudre ce problème.?
je le cherche depuis longtemps aidez moi SVP!

10 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
Salut,

Il s'agit apparemment d'un message du MDA "ContextSwitchDeadlock", il s'agit ici d'un message destiné à signaler la présence potentielle d'un problème
Tu ne ferais pas un traitement long dans le thread principal de l'application, c'est à dire celui du GUI ?

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
213
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
1 avril 2009

je ne comprends pas bien :
un traitement long dans le thread principal de l'application, c'est à dire celui du GUI ?

peux tu me l'expliquer?
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
Je ne vois pas comment l'expliquer autrement...
Un traitement long quoi, quelquechose qui s'execute durant plusieurs dizaines de secondes justement.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
7
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
25 février 2007

Salut,
tient j'ai le même problème et oui c'est pendant un traitement long lancé depuis la fenetre principale...

à l'époque il suffisait d'un Application.ProcessMessages; sous Delphi....

Quel est l'equivalent en C# ?
Merci.
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
Salut,


Application.DoEvents();

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
7
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
25 février 2007

J'essaie des ce soir.
Merci beaucoup. (d'autant qu'en lisant mieux j'aurais probablement trouvé...  )
Messages postés
7
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
25 février 2007

Heu, j'ai oublié un truc.
Un ami m'a conseillé de résoudre le problème en faisant faire le traitement en Thread géré par le threadpool...
Cela n'est-il pas plus judicieux ?
Je ferai le test pour voir les avantages et inconvenients des 2 solutions et vous donnerai les résultats.
Cordialement.
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
Oui, si tu peux te permettre de traiter ceci via des threads, c'est probablement mieux.
Je t'ai parler de DoEvent juste parce que tu as demander l'équivalent de ProcessMessages

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
7
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
25 février 2007

Bon ...
Je n'aurais probablement pas le temps de tester le fonctionnement en thread ce WE mais DoEvents() fonctionne bien (les perfs par contre sont à la rue, mais je pense que c'est mon traitement qu'il faut optimiser...)
La je me bats avec un datagridview (ça marche décidement pas comme en Delphi :D )
Je verrais donc après, quand j'en serais à l'optimisation...
Merci en tout cas.
++
Hervé
Messages postés
5
Date d'inscription
lundi 1 janvier 2018
Statut
Membre
Dernière intervention
23 juillet 2020

Bonjour,
J'avais le même problème.
Cela provenait de ce point :
"Dans Visual Studio, si vous ajoutez une OpenFileDialog à votre formulaire à l’aide d’une opération glisser, vous devez modifier la méthode InitializeOpenFileDialog suivante en supprimant la ligne qui crée une nouvelle instance de OpenFileDialog."