功能要求:要求实现进程通信,进程A开启管道监听,进程B连接管道,发送数据给进程A
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
Thread thread;
private void Button_Click(object sender, RoutedEventArgs e)
{
thread = new Thread(() =>
{
while (true)
{
using (NamedPipeServerStream pipeServer = new NamedPipeServerStream("testpipe", PipeDirection.InOut))
{
pipeServer.WaitForConnection();//等待连接,程序会阻塞在此处,直到有一个连接到达
try
{
using (StreamReader sr = new StreamReader(pipeServer))
{
var code = sr.ReadLine();
}
}
catch (Exception ex)
{
}
}
}
});
thread.Start();
}
}
进程开启管道服务监听连接,只要收到消息就读取消息,读完每次都关闭管道,通过while循环重新监听一个新的管道
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
try
{
using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "testpipe", PipeDirection.InOut))
{
pipeClient.Connect(3000);
using (StreamWriter sw = new StreamWriter(pipeClient))
{
sw.AutoFlush = true;
sw.WriteLine("hello world ");
}
}
}
catch (Exception ex)
{
}
}
}
进程B每次连接管道,发送消息,发送完毕关闭管道,可以重复多次发送消息
或者直接使用下面这种方式,可以支持同时发送和接收数据
thread = new Thread(() =>
{
while (true)
{
using (NamedPipeServerStream pipeServer = new NamedPipeServerStream("testpipe", PipeDirection.InOut))
{
pipeServer.WaitForConnection();
try
{
byte[] readBytes = new byte[1000];
int length = pipeServer.Read(readBytes, 0, readBytes.Length);
string code = Encoding.UTF8.GetString(readBytes,0, length);
byte[] byteArr = Encoding.UTF8.GetBytes("123456");
pipeServer.Write(byteArr, 0, byteArr.Length);
}
catch (Exception ex)
{
}
}
}
});
thread.Start();
using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "testpipe", PipeDirection.InOut))
{
pipeClient.Connect(3000);
byte[] byteArr = Encoding.UTF8.GetBytes("hello world");
pipeClient.Write(byteArr, 0, byteArr.Length);
byte[] readBytes = new byte[1000];
int lenth = pipeClient.Read(readBytes, 0, readBytes.Length);
string code = Encoding.UTF8.GetString(readBytes, 0, lenth);
}