Bonjour, je développe un logiciel qui doit communiquer avec un autre logiciel, voici un peu la structure:

AppAccesRemote --(.net remoting)--> Application du client (ici c'est moi lol).

L'application du client est essentiellement divisée en deux parties:

- Une classe CPontDonneesDistantes qui gère le remoting et accède aux données de AppAccesRemote (via le remoting). Lors de la connexion à l'objet remoté distant, cette classe fournit un delegate vers une de ces méthodes qui servira à AppAccesRemote pour avertir CPontDonneesDistantes de changements. Tout ceci fonctionne bien.
Lorsque cette classe reçoit un avis de changements sur AppAccesRemote, elle lance un événement qui sera catché par une autre classe.

- Une form qui contient un objet CPontDonneesDistantes et qui s'abonne aux événements de celle-ci. Elle doit donc recevoir les événements lancés par cette dernière

Ce qui ne fonctionne pas : lorsque CPontDonneesDistantes lance un événement, ma form ne le catche jamais !

Voici un peu de code pour vous éclairer:

Voici CPontDonneesDistantes.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
[Serializable]
public ref class CPontDonneesDistantes
{
public:
	CPontDonneesDistantes();
        // Événement basé sur un delegate contenu dans une dll référencée
	event NouveauPassageHandler^ SurNouveauPassage;				
 
private:
        // Interface permettant d'accéder aux données remotées
	IDonneesCommunesOmny^ m_oDonneesCommunes;
        // Méthode sur laquelle un delegate pointera et qui sera appelée à partir de AppAccesRemote 
	void RecevoirNouveauPassage(IPassage^ l_oPassage);
 
public :
	property IDonneesCommunesOmny^ DonneesCommunes
	{
		IDonneesCommunesOmny^ get ();
		void set (IDonneesCommunesOmny^ oValue);
	}
};
Dans le constructeur de CPontDonneesDistantes, je me lie à mon objet remoté, puis je me connecte avec un utilisateur et mot de passe bidon. Je passe aussi un delegate qui pointe sur RecevoirNouveauPassage et sera exécuté quand AppAccesRemote s'apercevra d'un nouveau passage

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
IUtilisateur^ test =  m_oDonneesCommunes->Connexion("test1", "test2", gcnew NouveauPassageHandler(this, &CPontDonneesDistantes::RecevoirNouveauPassage));
Voici la méthode implémentée qui lance un événement et qui n'est pas catché par ma form.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
void CPontDonneesDistantes::RecevoirNouveauPassage(IPassage^ l_oPassage)
{
	SurNouveauPassage(l_oPassage);	
}
Enfin, le code dans le constructeur de ma form:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
m_oPontDonnees = gcnew CPontDonneesDistantes();
m_oPontDonnees->SurNouveauPassage += gcnew NouveauPassageHandler(this, &FenetrePrinc::RecevoirPassage);
Voilà, j'espère ne pas vous avoir perdu ! Si vous avez besoin de plus d'infos, n'hésitez pas à en demander. Je commence à être désespéré