C# 高性能跨进程通信方案选型与实战
|
admin
2026年3月9日 7:36
本文热度 68
|
在C#中,可以使用不同的技术来实现跨进程通信。以下是一些常见的跨进程通信技术和示例:
1. 命名管道(Named Pipes):
```csharpusing (var pipeServer = new NamedPipeServerStream("myPipe")){ pipeServer.WaitForConnection();
using (var sw = new StreamWriter(pipeServer)) { sw.WriteLine("Hello from Process 1!"); }}
using (var pipeClient = new NamedPipeClientStream(".", "myPipe")){ pipeClient.Connect();
using (var sr = new StreamReader(pipeClient)) {string message = sr.ReadLine(); Console.WriteLine("Received message: " + message); }}```
2. Windows套接字(Windows Sockets):
```csharpusing (var serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)){ serverSocket.Bind(new IPEndPoint(IPAddress.Any, 1234)); serverSocket.Listen(1);
using (var clientSocket = serverSocket.Accept()) {byte[] buffer = Encoding.UTF8.GetBytes("Hello from Process 1!"); clientSocket.Send(buffer); }}
using (var clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)){ clientSocket.Connect("127.0.0.1", 1234);
byte[] buffer = newbyte[1024];int bytesRead = clientSocket.Receive(buffer);string message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("Received message: " + message);}```
3. Windows消息(Windows Messages):
```csharp[DllImport("user32.dll", CharSet = CharSet.Auto)]privatestaticexternintSendMessage(IntPtr hWnd, int Msg, int wParam, string lParam);
constint WM_COPYDATA = 0x004A;constint PROCESS2_ID = 12345;
string message = "Hello from Process 1!";SendMessage(Process.GetProcessById(PROCESS2_ID).MainWindowHandle, WM_COPYDATA, 0, message);
protectedoverridevoidWndProc(ref Message m){constint WM_COPYDATA = 0x004A;
if (m.Msg == WM_COPYDATA) { COPYDATASTRUCT copyData = (COPYDATASTRUCT)m.GetLParam(typeof(COPYDATASTRUCT));string message = Marshal.PtrToStringUni(copyData.lpData); Console.WriteLine("Received message: " + message); }
base.WndProc(ref m);}```
这些示例分别使用命名管道、Windows套接字和Windows消息来实现跨进程通信。你可以根据你的具体需求选择适合的方法来实现跨进程通信
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!作者:小码编匠
出处:gitee.com/smallcore/DotNetCore声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!
该文章在 2026/3/9 11:44:53 编辑过