2010-09-15 14 views
1

je dois avoir un tuyau anonyme dans le même processus pour permettre la communication asynchrone sur la base de flux entre deux bibliothèques.Accès refusé lors de l'utilisation AnonymousPipeStreams dans un seul processus

Tout fonctionne jusqu'à ce que j'appelle le Stream.Read() - je reçois un UnauthorizedAccessException - L'accès au chemin est refusé. Des idées?

using (var pipeServer = new AnonymousPipeServerStream(PipeDirection.Out)) 
using (var pipeClient = new AnonymousPipeClientStream(PipeDirection.In, pipeServer.SafePipeHandle)) 
{ 
    // External lib should close server pipe when it's done 
    archFile.ExtractionFinished += (sender, args) => pipeServer.Close(); 
    archFile.BeginExtractFile(archFileName, pipeServer); 

    var buf = new byte[1000]; 

    int read; 
    while ((read = pipeClient.Read(buf, 0, buf.Length)) > 0) 
    { ... } 
} 

Répondre

1

Vous devez utiliser le constructeur client qui prend le handle de canal sous la forme d'une chaîne plutôt que d'un SafeHandle. .: par exemple

using (var pipeServer = new AnonymousPipeServerStream(PipeDirection.Out)) 
using (var pipeClient = new AnonymousPipeClientStream(PipeDirection.In, pipeServer.GetClientHandleAsString())) 
{ 
    //... 
} 

Ceci est documenté dans la section "Remarques" à http://msdn.microsoft.com/en-us/library/system.io.pipes.anonymouspipeclientstream.aspx.

-1

Même « pipeServer.ClientSafePipeHandle » fonctionne également, dans l'extrait de code donné la réponse de Nicole

+0

Vous devez commenter la réponse de Nicole plutôt que de créer une nouvelle. –