begin process at 2012 02 10 12:34:55
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Mono

 > 

Général

 > 

Utilisation de delegate entre 2 namespace


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Utilisation de delegate entre 2 namespace

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ée 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 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 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. Crée une base de données [ par woot6768 ] Bonjour,Je souhaiterais crée une nouvelle base de données access (.mdb) dans mon code, puis la remplir avec une table déjà existante avec laquelle je [C#] Données et représentations graphiques [ par scoubidou944 ] glop glop les copains ;pExcel c'est bien beau mais me coltiner du VB pour remplir des combobox ca devient lourd.Le but : convertir mon appli Excel sou La Class Enum... [ par Bubuss ] Voilà je travail sous ASP .Net en utilisant le C# et pour créer une propriété avec une liste d'option à un WebControl j'utilise une classe enum (je n' Problème avec un DataGrid [ par ZeBFroG ] Bonjour à tous, J'ai un DataGrid que j'alimente avec une sourece de données.Cette source de données est un certains nombres de ProcStorLes ProcStor Problème avec XML (Faire comme fopen(file, "a+") en C) [ par MasterShadows ] Bonjour à tous et à toutes,alors je suis en train de faire une appli où j'utilise le  XML, en fait j'ai fait une boite de dialogue où on entre nos don perte de données avec le designer VS 2003 [ par fregolo52 ] Bonjour, Ce n'est pas la 1ere fois que ça m'arrive et ça me gave. J'ai créé ma propre TreeView dérivée de l'objet TreeView Winform. Je la place sur ma BAse de données et datagridview [ par cudenetf ] Bonjour,j'aimerais savoifr comment remplir un datagridview le plus rapidement possible est-il plus rapide de remplir a partir d'un execute reader ou d


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales