管道之间通信主要用到C#中两个类分别为NamedPipeClientStream和NamedPipeServerStream类
private void SendMessage_Click(object sender, RoutedEventArgs e)
{
using (NamedPipeClientStream namedPipeClient = new NamedPipeClientStream("Server-pipe"))
{
namedPipeClient.Connect(3000);
var message = "How are you";
byte[] outMessageByte = UTF8Encoding.UTF8.GetBytes(message);
namedPipeClient.Write(outMessageByte, 0, outMessageByte.Length);
byte[] inMessageByte = new byte[2048];
namedPipeClient.Read(inMessageByte, 0, 2048);
var inMessage = UTF8Encoding.UTF8.GetString(inMessageByte).TrimEnd('\0');
txtMesage.Text=inMessage;
}
}
using (NamedPipeServerStream namedPipeServer = new NamedPipeServerStream("Server-pipe", PipeDirection.InOut, 4, PipeTransmissionMode.Message))
{
while (true)
{
if (!namedPipeServer.IsConnected)
{
namedPipeServer.WaitForConnection();
}
byte[] inMessageByte = new byte[2048];
namedPipeServer.Read(inMessageByte, 0, 2048);
string message = UTF8Encoding.UTF8.GetString(inMessageByte);
string result = "I'm fine ,thank you";
try
{
Console.WriteLine(message);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
if (result != string.Empty)
{
byte[] payResult = UTF8Encoding.UTF8.GetBytes(result);
namedPipeServer.Write(payResult, 0, payResult.Length);
}
namedPipeServer.Disconnect();
}
}
这节我们主要介绍C#中如何在不同进程之间进行通信,希望对各位有帮助。