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

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

Par avance merci

Olivier
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
14299
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
16 novembre 2018
- 20 mai 2011 à 20:46
3
Merci
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.

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de NHenry
Meilleure réponse
Messages postés
258
Date d'inscription
jeudi 23 octobre 2003
Dernière intervention
20 mars 2013
- 20 mai 2011 à 22:22
3
Merci
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

Merci guilleto 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de guilleto
Messages postés
14299
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
16 novembre 2018
- 19 mai 2011 à 13:01
0
Merci
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
Messages postés
258
Date d'inscription
jeudi 23 octobre 2003
Dernière intervention
20 mars 2013
- 20 mai 2011 à 09:36
0
Merci
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.