Hello,

Alors mon message est un peu long, désolé.

j'ai commence le C# et j'ai beaucoup codé en java avant alors je voudrais savoir quelque chose que je faisais souvent en java avant : mettre un timeout sur un listener de socket (ie, il écoute jusqu'au timeout et ensuite s'arrête)

Je m'explique, voila ce que je faisais en pseudo code

[Thread d'écoute]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
while (listener.isListening) {
   Lock (Verrou) {
      listener.getResponse(); //appel bloquant jusqu'au TimeOut
      traitement de la réponse;
   }
}
[Thread principal]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Lock(Verrou)
   listener.isListening = false;
Je fais ça pour arrêter correctement le thread d'écoute.

maintenant un peu de C# pour vous montrer mon code actuel que je trouve moche. Je catch une exception quand le thread s'arrète.

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
 
/// <summary>
/// Listen the port, in a thread in fact
/// </summary>
private void Listen()
{
   try
   {
      while (_listener.IsListening)
      {
         HttpListenerContext ctx;
         ctx = _listener.GetContext(); // appel bloquant
         Thread thr = new Thread(ProcessRequest, 0);
         thr.Priority = ThreadPriority.Highest;
         thr.Start(ctx);
       }
   }
   catch (Exception ex)
   {
      // ya une erreur, le thread s'arrète
    }
}
et dans le thread principale, quand je ferme mon application

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
/// <summary>
/// stop the service, close the listener
/// </summary>
public void Stop(){
   try
   {
      _listener.Stop();
    }
    catch (Exception ex)
    {
      // erreur
     }
}
Bon ok c'est un peu long et c'est de la pinaille, mais on est vendredi aprem, c'est aujourd'hui où jamais pour améliorer mon code