Bonjour,
Mon problème est lié à l'utilisation de Threads STA qui fait qu'après un certain tps, mon appli se fixe ... et ne fais plus rien.
Pour faire simple, j'ai une appli composé de la Form principale contenant un webbrowser, cette Form lance un Thread qui ouvre "Form2" contenant également un webbrowser. A chaque Tick d'un Timer, je raffraichis l'affichage de mes forms en replacant le webbrowser dans la Form principale, et en fermant puis réouvrant la "Form2".
Le thread qui ouvre Form2 est en mode STA à cause de l'utilisation du Webbrowser.
J'utilise pour ouvrir la Form "Application.Run(new Form)"
Voici ci-dessus un aperçu de code
Mon problème est qu'après un temps aléatoire, j'ai un message d'erreur qui dit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 dim monThread as New System.Threading.Thread(AddressOf ouvreForm2) monThread.SetApartmentState(Threading.ApartmentState.STA) monThread.IsBackground = True monThread .Start() .... Private Sub ouvreForm2 Application.Run(maForm2) End Sub
J'ai cherché sans succès sur le net/forum pour trouver une solution, comment puis-je créer une pompe à message (par exemple CoWaitForMultipleHandles) ? ou comment puis-je faire que ca marcheLe CLR n'a pas pu effectuer de transition du contexte COM 0x1a43c0 au contexte COM 0x1a4530 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.
Merci d'avance à ceux qui prendront le temps de lire ce message.
Partager