Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Utilisation de delegate entre 2 namespace [ Mono / Général ] (philippe54250)

dimanche 16 septembre 2007 à 16:26:03 | Utilisation de delegate entre 2 namespace

philippe54250

Bonjour;
Voici mon probléme:
Dans un fichier ce trouve la gestion d'un GPS (  namespace classGPS , class GPS).
Dans un second fichier ce trouve l'affichage des données dans une Form.
Pour l'instant j'utilise un timer dans la Form pour lire les données.
Je préfèrerais que la class GPS fournisse un "delegate"ou un "event" lorsque les données sont prètes.
J'ai essayé plus possibilités sans succés.

Class GPS

public

delegatevoid_DonneesOK();

publicstatic_DonneesOK DonneesOK ;

puis

// Données a lire

if ((DonneesOK != null)&(wItems[0]=="GPGGA"))

{

DonneesOK();

}

dans class Form

GPS

.DonneesOK = newGPS._DonneesOK(miseAJourDonnees);

puis 

privatevoid miseAJourDonnees()

{

if (tabControl1.SelectedIndex == 0)// Page Gps

{

switch (tabControlGPS.SelectedIndex)

{

case 0: AffichePageGps(); break;

case 1: AffichePageSatellite(); break;

case 2: AffichePageTrames(); break;

}

}

// Page Gps

if (tabControl1.SelectedIndex == 1)// Page Navigation

}// Page Navigation

}
A l'exécution j'ai une erreur "Control.Invoke doit être utilisé pour permettre l'interaction avec des contrôles créés dans un autre thread."

Je n'ai trouvé que des examples de "delegate" dans un même fichier ou avec "invoke" avec un objet.
Une aide me serai très utile .
Merci .

 

dimanche 16 septembre 2007 à 22:15:21 | Re : Utilisation de delegate entre 2 namespace

ShareVB

Réponse acceptée !
salut,

il faut que tu mettes toute la mise à jour de l'UI dans une méthode à part void miseAJourUI();, tu crées un délégué miseAJourUIdelegate
dans ton thread qui appelle miseAJourDonnees, il faut que dans cette méthode :
miseAJourUIdelegate deleg = new miseAJourUIdelegate(miseAJourUI);
if (this.InvokeRequired)
deleg.Invoke();
else
miseAJourUI();

ShareVB

mercredi 19 septembre 2007 à 19:35:58 | Re : Utilisation de delegate entre 2 namespace

philippe54250

Réponse acceptée !
Bonjour, désolé mais je n'ai pas tout saisi dans tes explications (sans doute l'age).
 1:la signification de UI.
2:Comment appeler miseAJourUI qui je suppose ce trouve dans Form a partir de la classGps.

Merci.

mercredi 19 septembre 2007 à 22:56:05 | Re : Utilisation de delegate entre 2 namespace

ShareVB

Réponse acceptée !
salut,

euh, en faite UI c'est User Interface :
dans la classe GPS tu as un délégué de type _DonneesOK statique auquel tu affectes la méthode miseAJourDonnees tu n'as donc rien à changer dans la classe GPS

par contre, dans la méthode
miseAJourDonnees il faut que tu mettes le code suivant à la place du code existant :
miseAJourUIdelegate deleg = new miseAJourUIdelegate(miseAJourUI);
if (this.InvokeRequired)
deleg.Invoke();
else
miseAJourUI();

le code existant tu le mets dans une méthode miseAJourUI qui sera appelée dans le contexte du bon thread de ta form

et dans ta form, tu mets un delegate void miseAJourUIdelegate(); juste pour pouvoir faire le Invoke de ta méthode miseAJourUI

comme ca, ta classe GPS appelle ta méthode miseAJourDonnees  qui appelle à son tour la méthode MiseAJourUI mais dans le bon thread pour ne pas avoir l'exception InvalidOperation

ceci est nécessaire car tu ne peux accéder aux éléments de ta form que dans le contexte du thread qui les a créés, InvokeRequired appelé sur ta form t'indique si un changement de contexte est nécessaire pour accéder à ta form, autrement dit si tu es dans le bon thread ou pas...

il existe aussi le backgroundworker qui te permet de faire des traitements asynchrones : il y a un thread DoWork qui appelle le thread de ta form pour se mettre à jour...

ShareVB

jeudi 20 septembre 2007 à 18:13:37 | Re : Utilisation de delegate entre 2 namespace

philippe54250

Salut ,merci à toi ShareVB pour ces explications .
Je vais pouvoir mettre à jour mon code.
Philippe. 



Cette discussion est classé dans : données, class, gps, delegate, donneesok


Répondre à ce message

Sujets en rapport avec ce message

Récupération des données GPS Port série sur PC [ par simo5266 ] salut tous le monde,est ce qu'il ya qq'1 qui peut me donné une idée sur comment récupérer des données d'un GPS port série.Merci d'avance Reception de données interrompues avec Serialport Class [ par dufour ] Bonjour, J'ai un logiciel qui tourne en service. Le logiciel se connecte au démarrage sur le port com et lit ce qui arrive jusqu'à ce qu'on l'arrete. Récupération de données GPS (HELP) [ par rvns ] Bonjour, Je suis en train de développer actuellement une appli permettant de récupérer différentes données GPS tels que la vitesse, latitude, long Mise a jour d'une base des données [ par hfozepofpozfpfezpz ] Bonjour, j'aimerai ajouter un enregistrement a une base des données Sql server.Merci d'avance Mehdi Lecture données complexes dans fichier .txt [ par mimips2 ] Bonjour à tous, je suis nouveau sur le forum mais aussi en programmation.Ce que j'aimerais c'est de chercher dans un fichier .txt un numéro de la form Faire apparaitre des labels dans une Form [ par Jerepain ] Bonjour,Actuellement, dans mon programme, lorsque j'appuie sur un bouton je reçois des données par RS232. Lorsque je reçois ces données (par exemple 1 gestion de base de données à distance [ par adsana ] bonjour dans mon appli j'ai besoin de me connecter à une BD distante (autre serveur)et d'effectuer toutes les opération de mises à jour(select,insert affichage dans un dataGerid [ par adsana ] salut j'utilise le DataGrid pour afficher des données à partir de ma base de données ,mais ca ne fonctionne(possibilité de changer ls données et les s Atteindre un objet depuis une class [ par afournery ] Bonjoursous visual studio :je viens de placer un objet List sur mon formulairecomment depuis une class que je créé moi puis atteindre cette objet list Lire certains mots d'un fichier texte et les stocker pour les mettre dans une base de données [ par dreamkill ] Bonjour,J'aurais besoin d'un petit coup de pouce parce que même en faisant le tour des sites web je n'ai pas trouvé de réponses à mon problème.Je vous


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.