AnonymousPipeClientStream Classe

Definizione

Espone il lato client di un flusso di pipe anonimo, che supporta sia operazioni di lettura e scrittura sincrone che asincrone (senza supporto per l'annullamento nelle piattaforme Windows).

public ref class AnonymousPipeClientStream sealed : System::IO::Pipes::PipeStream
public sealed class AnonymousPipeClientStream : System.IO.Pipes.PipeStream
type AnonymousPipeClientStream = class
    inherit PipeStream
Public NotInheritable Class AnonymousPipeClientStream
Inherits PipeStream
Ereditarietà
AnonymousPipeClientStream
Ereditarietà
AnonymousPipeClientStream

Esempio

Nell'esempio seguente viene inviata una stringa da un processo padre a un processo figlio tramite pipe anonime. In questo esempio viene creato un AnonymousPipeServerStream oggetto in un processo padre con un PipeDirection valore .Out Crea anche un AnonymousPipeClientStream oggetto in un processo figlio con un PipeDirection valore .In Il processo padre invia quindi una stringa fornita dall'utente al processo figlio. La stringa viene visualizzata nella console.

Questo esempio è per il processo client, avviato dal processo del server. Assegnare un nome all'eseguibile risultante dal codice pipeClient.exe client e copiarlo nella stessa directory del file eseguibile del server quando si esegue questo esempio. Per l'intero esempio di codice, incluso il codice sia per il client della pipe che per il server, vedere Procedura: Usare pipe anonime per la comunicazione interprocesso locale.

//<snippet01>
#using <System.Core.dll>

using namespace System;
using namespace System::IO;
using namespace System::IO::Pipes;

ref class PipeClient
{
public:
    static void Main(array<String^>^ args)
    {
        if (args->Length > 1)
        {
            PipeStream^ pipeClient = gcnew AnonymousPipeClientStream(PipeDirection::In, args[1]);

            Console::WriteLine("[CLIENT] Current TransmissionMode: {0}.",
                pipeClient->TransmissionMode);

            StreamReader^ sr = gcnew StreamReader(pipeClient);

            // Display the read text to the console
            String^ temp;

            // Wait for 'sync message' from the server.
            do
            {
                Console::WriteLine("[CLIENT] Wait for sync...");
                temp = sr->ReadLine();
            }
            while (!temp->StartsWith("SYNC"));

            // Read the server data and echo to the console.
            while ((temp = sr->ReadLine()) != nullptr)
            {
                Console::WriteLine("[CLIENT] Echo: " + temp);
            }
            sr->Close();
            pipeClient->Close();
        }
        Console::Write("[CLIENT] Press Enter to continue...");
        Console::ReadLine();
    }
};

int main()
{
    array<String^>^ args = Environment::GetCommandLineArgs();
    PipeClient::Main(args);
}
//</snippet01>
//<snippet01>
using System;
using System.IO;
using System.IO.Pipes;

class PipeClient
{
    static void Main(string[] args)
    {
        if (args.Length > 0)
        {
            using (PipeStream pipeClient =
                new AnonymousPipeClientStream(PipeDirection.In, args[0]))
            {
                Console.WriteLine("[CLIENT] Current TransmissionMode: {0}.",
                   pipeClient.TransmissionMode);

                using (StreamReader sr = new StreamReader(pipeClient))
                {
                    // Display the read text to the console
                    string temp;

                    // Wait for 'sync message' from the server.
                    do
                    {
                        Console.WriteLine("[CLIENT] Wait for sync...");
                        temp = sr.ReadLine();
                    }
                    while (!temp.StartsWith("SYNC"));

                    // Read the server data and echo to the console.
                    while ((temp = sr.ReadLine()) != null)
                    {
                        Console.WriteLine("[CLIENT] Echo: " + temp);
                    }
                }
            }
        }
        Console.Write("[CLIENT] Press Enter to continue...");
        Console.ReadLine();
    }
}
//</snippet01>
'<snippet01>
Imports System.IO
Imports System.IO.Pipes

Class PipeClient
    Shared Sub Main(args() as String)
        If args.Length > 0 Then
            Using pipeClient As New AnonymousPipeClientStream(PipeDirection.In, args(0))
                Console.WriteLine("[CLIENT] Current TransmissionMode: {0}.", _
                   pipeClient.TransmissionMode)

                Using sr As New StreamReader(pipeClient)
                    ' Display the read text to the console
                    Dim temp As String

                    ' Wait for 'sync message' from the server.
                    Do
                        Console.WriteLine("[CLIENT] Wait for sync...")
                        temp = sr.ReadLine()
                    Loop While temp.StartsWith("SYNC") = False

                    ' Read the server data and echo to the console.
                    temp = sr.ReadLine()
                    While Not temp = Nothing
                        Console.WriteLine("[CLIENT] Echo: " + temp)
                        temp = sr.ReadLine()
                    End While
                End Using
            End Using
        End If
        Console.Write("[CLIENT] Press Enter to continue...")
        Console.ReadLine()
    End Sub
End Class
'</snippet01>

Commenti

Le pipe anonime consentono di fornire comunicazioni tra processi figlio e padre sicuri e sicuri. La AnonymousPipeClientStream classe consente a un processo figlio di connettersi e scambiare informazioni con un processo padre.

Le pipe anonime non sono denominate pipe unidirezionale che in genere trasferiscono dati tra processi padre e figlio. I pipe anonimi sono sempre locali; non possono essere usati su una rete. Un PipeDirection valore di InOut non è supportato perché le pipe anonime sono definite come unidirezionale.

Le pipe anonime non supportano la PipeTransmissionMode.Message modalità di lettura.

Il lato client di una pipe anonima deve essere creato da un handle di pipe fornito dal lato server chiamando il GetClientHandleAsString metodo . La stringa viene quindi passata come parametro durante la creazione del processo client. Dal processo client viene passato al AnonymousPipeClientStream costruttore come pipeHandleAsString parametro.

In Windows, le operazioni di lettura e scrittura asincrone (sovrapposte) non sono supportate da pipe anonime (vedere https://docs.microsoft.com/en-us/windows/win32/ipc/anonymous-pipe-operations). La AnonymousPipeClientStream classe pianifica comunque il lavoro sul pool di thread nelle piattaforme Windows in modo che funzionino le operazioni asincrone Stream , ma l'annullamento di tali operazioni non è supportato.

Costruttori

AnonymousPipeClientStream(PipeDirection, SafePipeHandle)

Inizializza una nuova istanza della classe AnonymousPipeClientStream dall'handle specificato.

AnonymousPipeClientStream(PipeDirection, String)

Inizializza una nuova istanza della classe AnonymousPipeClientStream con la direzione della pipe specificata e una rappresentazione di stringa dell'handle di pipe.

AnonymousPipeClientStream(String)

Inizializza una nuova istanza della classe AnonymousPipeClientStream con la rappresentazione di stringa specificata dell'handle di pipe.

Proprietà

CanRead

Ottiene un valore che indica se il flusso corrente supporta o meno le operazioni di lettura.

(Ereditato da PipeStream)
CanSeek

Ottiene un valore che indica se il flusso corrente supporta o meno le operazioni di ricerca.

(Ereditato da PipeStream)
CanTimeout

Ottiene un valore che determina se il flusso corrente prevede il timeout.

(Ereditato da Stream)
CanWrite

Ottiene un valore che indica se il flusso corrente supporta o meno le operazioni di scrittura.

(Ereditato da PipeStream)
InBufferSize

Ottiene la dimensione, in byte, del buffer in ingresso per una pipe.

(Ereditato da PipeStream)
IsAsync

Ottiene un valore che indica se un oggetto PipeStream è stato aperto in modalità sincrona o asincrona.

(Ereditato da PipeStream)
IsConnected

Ottiene o imposta un valore che indica se un oggetto PipeStream è connesso.

(Ereditato da PipeStream)
IsHandleExposed

Ottiene un valore che indica se viene esposto un handle a un oggetto PipeStream.

(Ereditato da PipeStream)
IsMessageComplete

Ottiene un valore indica se esistono altri dati nel messaggio restituito dalla più recente operazione di lettura.

(Ereditato da PipeStream)
Length

Ottiene la lunghezza di un flusso, in byte.

(Ereditato da PipeStream)
OutBufferSize

Ottiene la dimensione, in byte, del buffer in uscita per una pipe.

(Ereditato da PipeStream)
Position

Ottiene o imposta la posizione corrente del flusso corrente.

(Ereditato da PipeStream)
ReadMode

Imposta la modalità di lettura per l'oggetto AnonymousPipeClientStream.

ReadTimeout

Ottiene o imposta un valore, in millisecondi, che determina per quanto tempo il flusso tenterà la lettura prima del timeout.

(Ereditato da Stream)
SafePipeHandle

Ottiene l'handle sicuro per l'estremità locale della pipe incapsulata dall'oggetto PipeStream corrente.

(Ereditato da PipeStream)
TransmissionMode

Ottiene la modalità di trasmissione della pipe supportata dalla pipe corrente.

WriteTimeout

Ottiene o imposta un valore, in millisecondi, che determina per quanto tempo il flusso tenterà la scrittura prima del timeout.

(Ereditato da Stream)

Metodi

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Inizia un'operazione di lettura asincrona.

(Ereditato da PipeStream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Inizia un'operazione di scrittura asincrona.

(Ereditato da PipeStream)
CheckPipePropertyOperations()

Verifica che la pipe si trovi in uno stato appropriato per ottenere o impostare le proprietà.

(Ereditato da PipeStream)
CheckReadOperations()

Verifica che la pipe sia connessa per le operazioni di lettura.

(Ereditato da PipeStream)
CheckWriteOperations()

Verifica che la pipe sia connessa per le operazioni di scrittura.

(Ereditato da PipeStream)
Close()

Chiude il flusso corrente e libera le risorse, come socket e handle di file, ad esso associate. Anziché chiamare questo metodo, assicurarsi che il flusso sia eliminato correttamente.

(Ereditato da Stream)
CopyTo(Stream)

Legge i byte dal flusso corrente e li scrive in un altro flusso. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati.

(Ereditato da Stream)
CopyTo(Stream, Int32)

Legge tutti i byte dal flusso corrente e li scrive in un altro flusso, usando una dimensione di buffer specificata. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati.

(Ereditato da Stream)
CopyToAsync(Stream)

Legge in modo asincrono i byte dal flusso corrente e li scrive in un altro flusso. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati.

(Ereditato da Stream)
CopyToAsync(Stream, CancellationToken)

Legge in modo asincrono i byte dal flusso corrente e li scrive in un altro flusso, usando un token di annullamento specificato. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati.

(Ereditato da Stream)
CopyToAsync(Stream, Int32)

Legge in modo asincrono tutti i byte dal flusso corrente e li scrive in un altro flusso, utilizzando una dimensione di buffer specificata. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati.

(Ereditato da Stream)
CopyToAsync(Stream, Int32, CancellationToken)

Legge in modo asincrono i byte dal flusso corrente e li scrive in un altro flusso, usando una dimensione di buffer specificata e un token di annullamento. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati.

(Ereditato da Stream)
CreateObjRef(Type)

Consente di creare un oggetto che contiene tutte le informazioni rilevanti necessarie per la generazione del proxy utilizzato per effettuare la comunicazione con un oggetto remoto.

(Ereditato da MarshalByRefObject)
CreateWaitHandle()
Obsoleti.
Obsoleti.
Obsoleti.

Alloca un oggetto WaitHandle.

(Ereditato da Stream)
Dispose()

Rilascia tutte le risorse usate da Stream.

(Ereditato da Stream)
Dispose(Boolean)

Rilascia le risorse non gestite usate dalla classe PipeStream e facoltativamente le risorse gestite.

(Ereditato da PipeStream)
DisposeAsync()

Consente di liberare in modo asincrono le risorse non gestite utilizzate da Stream.

(Ereditato da Stream)
EndRead(IAsyncResult)

Termina una richiesta di lettura asincrona in sospeso.

(Ereditato da PipeStream)
EndWrite(IAsyncResult)

Termina una richiesta di scrittura asincrona in sospeso.

(Ereditato da PipeStream)
Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
Finalize()

Rilascia le risorse non gestite ed esegue altre operazioni di pulizia prima che l'istanza di AnonymousPipeClientStream venga recuperata da Garbage Collection.

Flush()

Cancella i dati del buffer del flusso corrente e consente la scrittura dei dati memorizzati nel buffer nel dispositivo sottostante.

(Ereditato da PipeStream)
FlushAsync()

Cancella in modo asincrono i dati di tutti i buffer del flusso e determina la scrittura dei dati memorizzati nel buffer nel dispositivo sottostante.

(Ereditato da Stream)
FlushAsync(CancellationToken)

Cancella in modo asincrono il buffer del flusso corrente e consente la scrittura dei dati memorizzati nel buffer nel dispositivo sottostante.

(Ereditato da PipeStream)
GetAccessControl()

Ottiene un oggetto PipeSecurity che incapsula le voci dell'elenco di controllo di accesso (ACL) per la pipe descritta dall'oggetto PipeStream corrente.

(Ereditato da PipeStream)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetLifetimeService()
Obsoleti.

Consente di recuperare l'oggetto servizio di durata corrente per controllare i criteri di durata per l'istanza.

(Ereditato da MarshalByRefObject)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
InitializeHandle(SafePipeHandle, Boolean, Boolean)

Inizializza un oggetto PipeStream dall'oggetto SafePipeHandle specificato.

(Ereditato da PipeStream)
InitializeLifetimeService()
Obsoleti.

Ottiene un oggetto servizio di durata per controllare i criteri di durata per questa istanza.

(Ereditato da MarshalByRefObject)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
MemberwiseClone(Boolean)

Crea una copia dei riferimenti dell'oggetto MarshalByRefObject corrente.

(Ereditato da MarshalByRefObject)
ObjectInvariant()
Obsoleti.

Fornisce supporto per un oggetto Contract.

(Ereditato da Stream)
Read(Byte[], Int32, Int32)

Legge un blocco di byte da un flusso e scrive i dati in un buffer specificato che inizia in una posizione specificata per una lunghezza specificata.

(Ereditato da PipeStream)
Read(Span<Byte>)

Legge una sequenza di byte dal flusso corrente, li scrive in una matrice di byte e fa avanzare la posizione all'interno del flusso in base al numero di byte letti.

(Ereditato da PipeStream)
ReadAsync(Byte[], Int32, Int32)

Legge in modo asincrono una sequenza di byte dal flusso corrente e passa alla posizione successiva nel flusso in base al numero di byte letti.

(Ereditato da Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

Legge in modo asincrono una sequenza di byte dal flusso corrente in una matrice di byte che inizia in una posizione specificata per un numero specificato di byte, fa avanzare la posizione all'interno del flusso in base al numero di byte letti e monitora le richieste di annullamento.

(Ereditato da PipeStream)
ReadAsync(Memory<Byte>, CancellationToken)

Legge in modo asincrono una sequenza di byte dal flusso corrente, li scrive in un intervallo di memoria di byte, fa avanzare la posizione all'interno del flusso in base al numero di byte letti e monitora le richieste di annullamento.

(Ereditato da PipeStream)
ReadAtLeast(Span<Byte>, Int32, Boolean)

Legge almeno un numero minimo di byte dal flusso corrente e sposta in avanti la posizione all'interno del flusso in base al numero di byte letti.

(Ereditato da Stream)
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken)

Legge in modo asincrono almeno un numero minimo di byte dal flusso corrente, sposta in avanti la posizione all'interno del flusso in base al numero di byte letti e monitora le richieste di annullamento.

(Ereditato da Stream)
ReadByte()

Legge un byte da una pipe.

(Ereditato da PipeStream)
ReadExactly(Byte[], Int32, Int32)

count Legge il numero di byte dal flusso corrente e sposta in avanti la posizione all'interno del flusso.

(Ereditato da Stream)
ReadExactly(Span<Byte>)

Legge i byte dal flusso corrente e sposta in avanti la posizione all'interno del flusso fino a quando non viene riempito.buffer

(Ereditato da Stream)
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken)

Legge in modo asincrono count il numero di byte dal flusso corrente, sposta in avanti la posizione all'interno del flusso e monitora le richieste di annullamento.

(Ereditato da Stream)
ReadExactlyAsync(Memory<Byte>, CancellationToken)

Legge in modo asincrono i byte dal flusso corrente, sposta la posizione all'interno del flusso fino a quando non buffer viene riempito e monitora le richieste di annullamento.

(Ereditato da Stream)
Seek(Int64, SeekOrigin)

Imposta la posizione corrente del flusso corrente sul valore specificato.

(Ereditato da PipeStream)
SetAccessControl(PipeSecurity)

Applica le voci dell'elenco di controllo di accesso (ACL) specificate da un oggetto PipeSecurity nella pipe specificata dall'oggetto PipeStream corrente.

(Ereditato da PipeStream)
SetLength(Int64)

Imposta la lunghezza del flusso corrente sul valore specificato.

(Ereditato da PipeStream)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)
WaitForPipeDrain()

Aspetta l'altra estremità della pipe per leggere tutti i byte inviati.

(Ereditato da PipeStream)
Write(Byte[], Int32, Int32)

Scrive un blocco di byte nel flusso corrente usando dati da un buffer.

(Ereditato da PipeStream)
Write(ReadOnlySpan<Byte>)

Scrive una sequenza di byte nel flusso corrente e fa avanzare la posizione corrente nel flusso del numero di byte scritti.

(Ereditato da PipeStream)
WriteAsync(Byte[], Int32, Int32)

Scrive in modo asincrono una sequenza di byte nel flusso corrente e passa alla posizione successiva nel flusso in base al numero di byte scritti.

(Ereditato da Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

Scrive in modo asincrono un numero specificato di byte da una matrice di byte che inizia in una posizione specificata, fa avanzare la posizione corrente all'interno del flusso in base al numero di byte scritti e monitora le richieste di annullamento.

(Ereditato da PipeStream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Scrive in modo asincrono una sequenza di byte nel flusso corrente e passa alla posizione successiva all'interno del flusso corrente in base al numero di byte scritti e monitora le richieste di annullamento.

(Ereditato da PipeStream)
WriteByte(Byte)

Scrive un byte nel flusso corrente.

(Ereditato da PipeStream)

Metodi di estensione

CopyToAsync(Stream, PipeWriter, CancellationToken)

Legge in modo asincrono i byte da Stream e li scrive nel PipeWriter specificato usando un token di annullamento.

GetAccessControl(PipeStream)

Restituisce le informazioni di sicurezza di un flusso di pipe.

SetAccessControl(PipeStream, PipeSecurity)

Modifica gli attributi di sicurezza di un flusso di pipe esistente.

ConfigureAwait(IAsyncDisposable, Boolean)

Consente di configurare la modalità di esecuzione delle espressioni await per le attività restituite da un elemento disposable asincrono.

Si applica a