guilleto
Messages postés256Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention20 mars 2013
-
19 mai 2011 à 10:37
guilleto
Messages postés256Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention20 mars 2013
-
20 mai 2011 à 22:22
Bonjour à toutes et tous,
J'ai actuellement une application qui fonctionne avec une page MDI Parent et (pour l'instant) 3 feuilles MDI filles, dans chacune de ces feuilles filles j'ai un Timer avec des intervalles différents.
Ces 3 Timers interrogent des BdD de type SQLite sur un serveur.
Au vu de la quantité d'information contenues dans ces BdD, mes pages 'lagguent' !
Je souhaites passer en mode threading mais j'ai quelques soucis : A priori les BackGroundWorker mis en lieu et place des Timers fonctionnent mais chacun des codes contient des actions sur la Feuille MDI Parent et c'est là qu'est le problème !
J'ai un message d'erreur qui apparaît sur une ligne de code du style :
FeuilMDI_Parent.UnLabel.text = "ALERTE !"
Il me demande de consulter Exception.InnerException car l'erreur s'est produite lors de la création du formulaire et qu'il est impossible d'instancier le contrôle ActiveX '8856f961-340a-11d0-a96b-00c04fd705a2' car le Thread actuel n'est pas un Thread cloisonné (STA, Single-Threaded Apartment).
Que puis-je faire pour corriger cela ?
Quelqu'un aurait un bout de code avec des explications qui me permettrait de comprendre pourquoi j'ai ce genre de chose ?
J'ai fait pas mal de recherche, et j'avoue ne pas tout comprendre (Thread MDA/SDA) !
guilleto
Messages postés256Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention20 mars 20131 20 mai 2011 à 22:22
Bonsoir NHenry,
Merci pour le lien, j'y suis allé et j'avoue sans honte que c'est assez indigeste pour mon niveau !
J'ai toutefois réussi à contourner le problème à savoir : puisqu'un élément ne pouvait pas être mis à jour sur une Form principale à partir d'une Form Fille sur laquelle était mis en place un BackGroundWorker, j'ai donc mis les BGW sur la Form Principale, placé dans BGW_Progress un élément indiquant les informations utiles à la Form principale sous forme de Variable !
Je suis persuadé qu'il y a mieux, plus propre mais à mon niveau je trouve cela déjà bien que ça fonctionne. Amené à revenir souvent pour des améliorations je penses que je ferais mieux la prochaine fois et peut-être qu'à ce moment le lien que tu m'as laissé me semblera moins indigeste qu'aujourd'hui !
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 19 mai 2011 à 13:01
Bonjour,
Le multithreading est complexe à gérer.
Dans le framework, il y a une limitation (volontaire) qui bloque la modification des composant graphique aux autres threads que celui qui a créé le composant.
Dans ce cas, regardes l'état de InvokeRequired du contrôle ciblé, si c'est à True, Appelles la fonction Invoke du contrôle en lui passant un delegate et les données des paramètres.
Je ne me rappel plus de l'exception générée.
Dans tous les cas, il faut que tu regardes dans InnerException, tu aura, je pense, plus d'information.
guilleto
Messages postés256Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention20 mars 20131 20 mai 2011 à 09:36
Merci nHenry,
Mais j'avoue que cela reste flou pour moi !
Ce que je cherche à faire est la chose suivante :
Avoir un programme principal appelant 'N' Threads indépendants qui ne s'arrêtent jamais et qui retournent des informations au programme principal.