Bonjour tout le monde,

J'utilise NamedPipeServerStream et NamedPipeClientStream dans mon application pour passer des données d'une instance à l'autre. La première instance du programme utilise un BackgroundWorker dans lequel j'utilise le PipeServer. Les instances suivantes utilisent un PipeClient pour envoyer des données au server puis se referment. Tout ça fonctionne bien.

Mon problème est au niveau de l'utilisation du PipeServer. Voilà mon code (dans le dowork du BackgroundWorker ):

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
 
BackgroundWorker b = sender as BackgroundWorker;
while (!b.CancellationPending)
{
 
    NamedPipeServerStream pipeServer = new NamedPipeServerStream("monappli", PipeDirection.In);
    pipeServer.WaitForConnection();                
    try
    {
        using (StreamReader sw = new StreamReader(pipeServer))
        {
            while (!sw.EndOfStream)
            {
                (e.Argument as ToDoList).Add(sw.ReadLine());
            }                        
        }
    }
    catch (IOException exc)
    {
        Console.WriteLine("ERROR: {0}", exc.Message);
    }
    pipeServer.Close();
    pipeServer = null;                                
}
Comme vous le voyez, à chaque information reçue, je ferme le server pour en recréer un autre. Au début, j'avais créé mon server avant le while et je le fermais après. Mais une fois utilisé par le WaitForConnection(), le pipe était fermé et je récoltais une erreur. J'ai donc décidé d'en recréer un à chaque fois mais je me dis que c'est un peu lourd et qu'il y a surement une solution pour le conserver ouvert tant que le BackgroundWorker n'est pas arrêté.

Je me tourne vers vous pour savoir si vous auriez la solution à ce problème.

Papy !