Je travaille sur une application qui communique avec un périphérique externe via une bibliothèque COM tierce. Je tente d'avoir toutes les communications à l'appareil passent par un fil de fond à la fois pour éviter les problèmes de communication de vider mon application et de se débarrasser de certaines autres complexités introduites par la communication dans le fil de l'interface utilisateur. Le problème est que chaque fois que quelque chose arrive qui bloque le thread principal de l'IU (c'est-à-dire que MessageBox.Show est appelé ou même simplement déplace la fenêtre sur l'écran), la communication avec le périphérique sur le thread d'arrière-plan s'arrête également.Un thread d'interface utilisateur bloque un thread d'arrière-plan appelant un objet COM
Existe-t-il un moyen (à part un processus totalement séparé) de séparer suffisamment les deux fils pour qu'ils n'interfèrent pas les uns avec les autres? (Remarque, le même code avec quelques calculs mathématiques pour ralentir un peu fonctionne très bien, c'est seulement quand j'utilise la bibliothèque COM que j'ai le problème)
Cela semble très étrange. Sans voir votre code, il est difficile de savoir avec certitude pourquoi le fait que le thread de l'interface utilisateur soit occupé ralentit votre autre thread. Y a-t-il quelque chose sur le thread de travail qui pourrait éventuellement attendre que le thread UI fasse quelque chose? –
Votre thread d'arrière-plan indique-t-il à l'interface utilisateur d'ouvrir une boîte de message en utilisant 'Invoke'? – Paolo
@Paolo, On dirait que c'est quelque chose qui se produirait beaucoup plus fréquemment que d'ouvrir une boîte de message ou quelque chose comme ça. Vraisemblablement, il n'ouvre pas autant de boîtes de messages qui saisissent la fenêtre et la déplacent, provoquant un ralentissement. :) –