WPF-14 进程间相互通信
业务背景:笔者当初在做餐馆收银软件的时候svchost exe是什么进程 ,客户提了一个需求,由于老外比较喜欢刷卡支付,所以在做支付订单时需要多外接几个pos刷卡机,当4-5个人同时结账时,不用排队,这是一个再合理不过的需求,但是,当我们同时拿到两台pos刷卡机做实验时,当我们加载dll到我们WPF应用程序中时,发现不能同时启动多个pos刷卡机的实例,一个进程只能加载一个实例,如果同时启动多个实例,只有一个有效,于是我们在应用程序启动的时候,根据客户的配置,动态启动我们预先设置好的exe程序,我们将pos刷卡机提供的组件宿主到不同的exe文件中,这样我们主程序只需要和不同exe文件之间进行通信就可以了
管道之间通信主要用到C#中两个类分别为NamedPipeClientStream和NamedPipeServerStream类
客户端:
privatevoidSendMessage_Click( objectsender, RoutedEventArgs e )
using(NamedPipeClientStream namedPipeClient = newNamedPipeClientStream( "Server-pipe"))
namedPipeClient.Connect( 3000);
varmessage = "How are you";
byte[] outMessageByte = UTF8Encoding.UTF8.GetBytes(message);
namedPipeClient.Write(outMessageByte, 0, outMessageByte.Length);
byte[] inMessageByte = newbyte[ 2048];
namedPipeClient.Read(inMessageByte, 0, 2048);
varinMessage = UTF8Encoding.UTF8.GetString(inMessageByte).TrimEnd( '\0');
txtMesage.Text=inMessage;
服务器端:
using(NamedPipeServerStream namedPipeServer = newNamedPipeServerStream( "Server-pipe", PipeDirection.InOut, 4, PipeTransmissionMode.Message))
while( true)
if(!namedPipeServer.IsConnected)
namedPipeServer.WaitForConnection;
byte[] inMessageByte = newbyte[ 2048];
namedPipeServer.Read(inMessageByte, 0, 2048);
stringmessage = UTF8Encoding.UTF8.GetString(inMessageByte);
stringresult = "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#中如何在不同进程之间进行通信svchost exe是什么进程 ,希望对各位有帮助
爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。