AnonymousPipeClientStream 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
公開匿名管道數據流的用戶端,其同時支援同步和異步讀取和寫入作業(在 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
- 繼承
- 繼承
範例
下列範例會使用匿名管道,將字串從父進程傳送至子進程。 此範例會在父進程中建立 AnonymousPipeServerStream 物件,其值為 OutPipeDirection。它也會在子進程中建立 AnonymousPipeClientStream 物件,其值為 PipeDirectionIn。 父進程接著會將使用者提供的字串傳送至子進程。 字串會顯示至主控台。
此範例適用於伺服器進程所啟動的客戶端進程。 將用戶端程式代碼產生的可執行檔命名為 pipeClient.exe
,並在執行此範例時,將其複製到與伺服器可執行檔相同的目錄。 如需整個程式代碼範例,包括管道用戶端和伺服器的程式代碼,請參閱 如何:使用匿名管道進行本機進程間通訊。
//<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>
備註
匿名管道有助於在子進程與父進程之間提供安全且安全的進程間通訊。 AnonymousPipeClientStream 類別可讓子進程連接到父進程,並與父進程交換資訊。
匿名管道是未命名的單向管道,通常會在父進程和子進程之間傳輸數據。 匿名管道一律為本機;它們無法透過網路使用。 不支援 InOutPipeDirection 值,因為匿名管道定義為單向。
匿名管道不支援 PipeTransmissionMode.Message 讀取模式。
匿名管道的客戶端必須透過呼叫 GetClientHandleAsString 方法,從伺服器端提供的管道句柄建立。 接著,在建立客戶端進程時,字串會當做參數傳遞。 從客戶端進程,它會以 pipeHandleAsString
參數的形式傳遞至 AnonymousPipeClientStream 建構函式。
在 Windows 上,匿名管道不支援異步(重疊)讀取和寫入作業(請參閱 匿名管道作業)。 AnonymousPipeClientStream 類別仍會在 Windows 平臺上的線程集區上排程工作,因此異步 Stream 作業運作,但不支援取消這些作業。
建構函式
AnonymousPipeClientStream(PipeDirection, SafePipeHandle) |
從指定的句柄初始化 AnonymousPipeClientStream 類別的新實例。 |
AnonymousPipeClientStream(PipeDirection, String) |
使用指定的管道方向和管道句柄的字串表示,初始化 AnonymousPipeClientStream 類別的新實例。 |
AnonymousPipeClientStream(String) |
使用管道句柄的指定字串表示,初始化 AnonymousPipeClientStream 類別的新實例。 |
屬性
CanRead |
取得值,指出目前數據流是否支援讀取作業。 (繼承來源 PipeStream) |
CanSeek |
取得值,指出目前數據流是否支持搜尋作業。 (繼承來源 PipeStream) |
CanTimeout |
取得值,這個值會判斷目前的數據流是否可以逾時。 (繼承來源 Stream) |
CanWrite |
取得值,指出目前數據流是否支援寫入作業。 (繼承來源 PipeStream) |
InBufferSize |
取得管道輸入緩衝區的大小,以位元組為單位。 (繼承來源 PipeStream) |
IsAsync |
取得值,指出 PipeStream 物件是以異步或同步方式開啟。 (繼承來源 PipeStream) |
IsConnected |
取得或設定值,指出 PipeStream 物件是否已連接。 (繼承來源 PipeStream) |
IsHandleExposed |
取得值,指出是否公開 PipeStream 物件的句柄。 (繼承來源 PipeStream) |
IsMessageComplete |
取得值,指出從最近讀取作業傳回的訊息中是否有更多數據。 (繼承來源 PipeStream) |
Length |
取得數據流的長度,以位元組為單位。 (繼承來源 PipeStream) |
OutBufferSize |
取得管道輸出緩衝區的大小,以位元組為單位。 (繼承來源 PipeStream) |
Position |
取得或設定目前數據流的目前位置。 (繼承來源 PipeStream) |
ReadMode |
設定 AnonymousPipeClientStream 物件的讀取模式。 |
ReadTimeout |
取得或設定值,以毫秒為單位,決定數據流在逾時之前嘗試讀取的時間長度。 (繼承來源 Stream) |
SafePipeHandle |
取得目前 PipeStream 物件封裝之管道之本機端的安全句柄。 (繼承來源 PipeStream) |
TransmissionMode |
取得目前管道支援的管道傳輸模式。 |
WriteTimeout |
取得或設定值,以毫秒為單位,決定數據流在逾時之前嘗試寫入的時間長度。 (繼承來源 Stream) |
方法
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
開始異步讀取作業。 (繼承來源 PipeStream) |
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
開始異步寫入作業。 (繼承來源 PipeStream) |
CheckPipePropertyOperations() |
確認管道處於取得或設定屬性的適當狀態。 (繼承來源 PipeStream) |
CheckReadOperations() |
確認管道處於讀取作業的連線狀態。 (繼承來源 PipeStream) |
CheckWriteOperations() |
確認管道處於寫入作業的連線狀態。 (繼承來源 PipeStream) |
Close() |
關閉目前的數據流,並釋放與目前數據流相關聯的任何資源(例如套接字和檔句柄)。 請確定已正確處置數據流,而不是呼叫此方法。 (繼承來源 Stream) |
CopyTo(Stream) |
從目前的數據流讀取位元組,並將其寫入另一個數據流。 這兩個數據流位置都會依複製的位元元組數目進階。 (繼承來源 Stream) |
CopyTo(Stream, Int32) |
從目前的數據流讀取位元組,並使用指定的緩衝區大小將它們寫入另一個數據流。 這兩個數據流位置都會依複製的位元元組數目進階。 (繼承來源 Stream) |
CopyToAsync(Stream) |
以異步方式從目前的數據流讀取位元組,並將其寫入另一個數據流。 這兩個數據流位置都會依複製的位元元組數目進階。 (繼承來源 Stream) |
CopyToAsync(Stream, CancellationToken) |
使用指定的取消標記,以異步方式從目前數據流讀取位元組,並將其寫入另一個數據流。 這兩個數據流位置都會依複製的位元元組數目進階。 (繼承來源 Stream) |
CopyToAsync(Stream, Int32) |
使用指定的緩衝區大小,以異步方式從目前數據流讀取位元組,並將其寫入另一個數據流。 這兩個數據流位置都會依複製的位元元組數目進階。 (繼承來源 Stream) |
CopyToAsync(Stream, Int32, CancellationToken) |
使用指定的緩衝區大小和取消標記,以異步方式從目前數據流讀取位元組,並將其寫入另一個數據流。 這兩個數據流位置都會依複製的位元元組數目進階。 (繼承來源 Stream) |
CreateObjRef(Type) |
建立物件,其中包含產生用來與遠端物件通訊之 Proxy 所需的所有相關信息。 (繼承來源 MarshalByRefObject) |
CreateWaitHandle() |
已淘汰.
已淘汰.
已淘汰.
配置 WaitHandle 物件。 (繼承來源 Stream) |
Dispose() |
釋放 Stream所使用的所有資源。 (繼承來源 Stream) |
Dispose(Boolean) |
釋放 PipeStream 類別所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。 (繼承來源 PipeStream) |
DisposeAsync() |
以異步方式釋放 Stream所使用的 Unmanaged 資源。 (繼承來源 Stream) |
EndRead(IAsyncResult) |
結束暫止的異步讀取要求。 (繼承來源 PipeStream) |
EndWrite(IAsyncResult) |
結束暫止的異步寫入要求。 (繼承來源 PipeStream) |
Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
Finalize() |
釋放 Unmanaged 資源,並在垃圾收集回收 AnonymousPipeClientStream 實例之前執行其他清除作業。 |
Flush() |
清除目前數據流的緩衝區,並導致任何緩衝的數據寫入基礎裝置。 (繼承來源 PipeStream) |
FlushAsync() |
以異步方式清除此數據流的所有緩衝區,並導致任何緩衝的數據寫入基礎裝置。 (繼承來源 Stream) |
FlushAsync(CancellationToken) |
以異步方式清除目前數據流的緩衝區,並導致任何緩衝的數據寫入基礎裝置。 (繼承來源 PipeStream) |
GetAccessControl() |
取得 PipeSecurity 對象,這個物件會封裝目前 PipeStream 物件所描述管道的訪問控制清單 (ACL) 專案。 (繼承來源 PipeStream) |
GetHashCode() |
做為預設哈希函式。 (繼承來源 Object) |
GetLifetimeService() |
已淘汰.
擷取控制這個實例存留期原則的目前存留期服務物件。 (繼承來源 MarshalByRefObject) |
GetType() |
取得目前實例的 Type。 (繼承來源 Object) |
InitializeHandle(SafePipeHandle, Boolean, Boolean) |
從指定的 SafePipeHandle 物件初始化 PipeStream 物件。 (繼承來源 PipeStream) |
InitializeLifetimeService() |
已淘汰.
取得存留期服務物件,以控制這個實例的存留期原則。 (繼承來源 MarshalByRefObject) |
MemberwiseClone() |
建立目前 Object的淺層複本。 (繼承來源 Object) |
MemberwiseClone(Boolean) |
建立目前 MarshalByRefObject 對象的淺層複本。 (繼承來源 MarshalByRefObject) |
ObjectInvariant() |
已淘汰.
提供 Contract的支援。 (繼承來源 Stream) |
Read(Byte[], Int32, Int32) |
從數據流讀取位元組區塊,並將數據寫入指定的緩衝區,從指定長度的指定位置開始。 (繼承來源 PipeStream) |
Read(Span<Byte>) |
從目前數據流讀取位元組序列、將它們寫入位元組陣列,並將數據流中的位置依讀取的位元組數目往前移。 (繼承來源 PipeStream) |
ReadAsync(Byte[], Int32, Int32) |
以異步方式從目前數據流讀取位元組序列,並依讀取的位元元組數目將數據流中的位置往前移。 (繼承來源 Stream) |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
以異步方式將位元組序列從目前數據流讀取至位元組陣列,從指定位元組數目開始的位元組陣列、依讀取的位元組數目將數據流中的位置往前移,並監視取消要求。 (繼承來源 PipeStream) |
ReadAsync(Memory<Byte>, CancellationToken) |
以異步方式從目前數據流讀取位元組序列、將它們寫入位元組記憶體範圍、依讀取位元組數目將數據流中的位置往前移,以及監視取消要求。 (繼承來源 PipeStream) |
ReadAtLeast(Span<Byte>, Int32, Boolean) |
從目前數據流讀取至少一個字節數目,並將數據流中的位置依讀取的位元組數目往前移。 (繼承來源 Stream) |
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
以異步方式從目前數據流讀取至少一個字節數目、依讀取的位元組數目將數據流中的位置往前移,並監視取消要求。 (繼承來源 Stream) |
ReadByte() |
從管道讀取位元組。 (繼承來源 PipeStream) |
ReadExactly(Byte[], Int32, Int32) |
從目前數據流讀取 |
ReadExactly(Span<Byte>) |
從目前的數據流讀取位元組,並將位置往前移,直到填入 |
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
以異步方式從目前數據流讀取 |
ReadExactlyAsync(Memory<Byte>, CancellationToken) |
以異步方式從目前數據流讀取位元組、將數據流中的位置往前移,直到填入 |
Seek(Int64, SeekOrigin) |
將目前數據流的目前位置設定為指定的值。 (繼承來源 PipeStream) |
SetAccessControl(PipeSecurity) |
將 PipeSecurity 物件指定的訪問控制清單 (ACL) 專案套用至目前 PipeStream 物件指定的管道。 (繼承來源 PipeStream) |
SetLength(Int64) |
將目前數據流的長度設定為指定的值。 (繼承來源 PipeStream) |
ToString() |
傳回表示目前 物件的字串。 (繼承來源 Object) |
WaitForPipeDrain() |
等候管道的另一端讀取所有傳送的位元組。 (繼承來源 PipeStream) |
Write(Byte[], Int32, Int32) |
使用緩衝區中的數據,將位元組區塊寫入目前數據流。 (繼承來源 PipeStream) |
Write(ReadOnlySpan<Byte>) |
將位元組序列寫入目前數據流,並依寫入的位元元組數目,將這個數據流中的目前位置往前移。 (繼承來源 PipeStream) |
WriteAsync(Byte[], Int32, Int32) |
以異步方式將位元組序列寫入目前數據流,並依寫入的位元元組數目,將這個數據流中的目前位置往前移。 (繼承來源 Stream) |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
從位元組陣列從指定位置開始,以異步方式寫入指定的位元組數目、依寫入的位元組數目將這個資料流中的目前位置往前移,並監視取消要求。 (繼承來源 PipeStream) |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
以異步方式將位元組序列寫入至目前的數據流、依寫入的位元組數目將這個數據流中的目前位置往前移,並監視取消要求。 (繼承來源 PipeStream) |
WriteByte(Byte) |
將位元組寫入目前數據流。 (繼承來源 PipeStream) |
擴充方法
CopyToAsync(Stream, PipeWriter, CancellationToken) |
使用取消標記,以異步方式從 Stream 讀取位元組,並將其寫入指定的 PipeWriter。 |
GetAccessControl(PipeStream) |
傳回管道數據流的安全性資訊。 |
SetAccessControl(PipeStream, PipeSecurity) |
變更現有管道數據流的安全性屬性。 |
ConfigureAwait(IAsyncDisposable, Boolean) |
設定如何執行從異步可處置專案傳回的工作等候。 |