Multi Thread sur pages MDI : Besoin d'aide ! [Résolu]

guilleto 258 Messages postés jeudi 23 octobre 2003Date d'inscription 20 mars 2013 Dernière intervention - 19 mai 2011 à 10:37 - Dernière réponse : guilleto 258 Messages postés jeudi 23 octobre 2003Date d'inscription 20 mars 2013 Dernière intervention
- 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) !

Par avance merci

Olivier
Afficher la suite 

4 réponses

Répondre au sujet
NHenry 14134 Messages postés vendredi 14 mars 2003Date d'inscription 23 avril 2018 Dernière intervention - 20 mai 2011 à 20:46
+3
Utile
Bonjour,

Je te conseil cette lecture :
http://msdn.microsoft.com/en-us/library/ms171728%28v=vs.80%29.aspx

Il se peut que ton problème ne vienne pas de là, mais on ne sait jamais.

Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de NHenry
guilleto 258 Messages postés jeudi 23 octobre 2003Date d'inscription 20 mars 2013 Dernière intervention - 20 mai 2011 à 22:22
+3
Utile
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 !

Encore merci pour ton aide

Olivier
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de guilleto
NHenry 14134 Messages postés vendredi 14 mars 2003Date d'inscription 23 avril 2018 Dernière intervention - 19 mai 2011 à 13:01
0
Utile
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.

Commenter la réponse de NHenry
guilleto 258 Messages postés jeudi 23 octobre 2003Date d'inscription 20 mars 2013 Dernière intervention - 20 mai 2011 à 09:36
0
Utile
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.

Je ne sais pas si je suis assez clair.

Par avance merci

Olivier
Commenter la réponse de guilleto

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.