Bonjour,
je suis en train de développer une application (un service windows) qui communique en TCP/IP avec d'autres applications.
1. "Application1" demande une valeur à "Mon application" via TCP/IP.
2. "Mon application" doit demander cette valeur à l'application2 (toujours via TCP/IP)
3. "Application2" retourne la valeur demandée.
4. "Mon application" retourne la valeur obtenue à "Application1".
J'ai eu idée de synchroniser les threads d'envoi et de réception avec ManualResetEvent.
Sur réception du message de "Application1" par "Mon application", la méthode GetInfoValue est appelée.
Cette méthode envoie un message à "Application2" pour demander la valeur requise.
Le thread est bloqué avec l'appel à manualEvent.WaitOne
Sur réception de la réponse de "Application2", la valeur à retourner est initialisée(m_RequestedValue) et le thread est débloqué (manualEvent.Set)
Suite au déblocage du thread, un nouveau message est envoyée à "Application1" avec la valeur obtenue.
Selon vous, ai-je bien fait de synchroniser les threads d'envoi et de réception avec ManualResetEvent.
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 private InfoValue m_RequestedValue; // Synchronisation private System.Threading.ManualResetEvent manualEvent; public InfoValue GetInfoValue(string infoKey) { this.SendMessage(new RequestToLC { InfoKey = infoKey }); manualEvent.Reset(); if (manualEvent.WaitOne(3000)) return m_RequestedValue; else return null; } /// <summary> /// Réception d'un nouveau message /// </summary> /// <param name="sender">Emetteur de l'évènement</param> /// <param name="e">Evenement associé incluant le message TCP réceptionné</param> private void ReceivedMessage(object sender, ReceivedMessageEventArgs e) { var requestedValue = e.RequestedValue; // Traitement du message reçu if (requestedValue != null) { m_RequestedValue = requestedValue; manualEvent.Set(); } }
Sinon, comment aurais-je dû procéder selon vous ?
Merci d'avance,
Etienne
Partager