C# WinForm【笔记13】跨项目交互代码执行:工程A exe打开工程B执行相关函数

📅 2026/7/9 4:55:58
C# WinForm【笔记13】跨项目交互代码执行:工程A exe打开工程B执行相关函数
一、首先将对应Debug放进ADebug里面如下二、按钮点击打开该文件XUexe文件同时创建客户端简单发送NamedPipeClientStream client; private void btnOpen_Click(object sender, EventArgs e) { // 获取当前程序所在目录 string currentDir Application.StartupPath \\Bemp_Index.Text; var targetFiles Directory.GetFiles(currentDir, *.exe); // 如果没有找到文件 if (targetFiles.Length 0) { MessageBox.Show(未找到相关.exe程序); return; } string targetExe targetFiles .OrderByDescending(f File.GetLastWriteTime(f)) // 按修改时间排序 .First(); // 取最新的一个 // 启动目标程序 Process.Start(targetExe); BempDesc 其他; //创建exe客户端 client new NamedPipeClientStream(., MyPipe, PipeDirection.InOut); client.Connect(3000); // 超时3秒 }三、发送字符串代码函数public void Bump_Open() { string str ; if (ckPA.Checked) { strckPA.Text开; } if (ckBA.Checked) { str str, ckBA.Text 开; } byte[] msg Encoding.UTF8.GetBytes(str); client.Write(msg, 0, msg.Length); client.Flush(); }四、B工程加载创建服务端并做接收操作public Form1() { InitializeComponent(); #region exe服务端接收 var server new NamedPipeServerStream(MyPipe, PipeDirection.InOut, 1, PipeTransmissionMode.Message); // 关键消息模式 server.WaitForConnection(); // 等待启动方连接 Thread th new Thread(() { while (server.IsConnected) { int bytesRead server.Read(buffer, 0, buffer.Length); if (bytesRead 0) { break; } string message Encoding.UTF8.GetString(buffer, 0, bytesRead); string[] arr message.Split(,); for (int i 0; i arr.Length; i) { if (arr[i] PA开) { byte[] data new byte[4]; data[0] 0x04; data[1] 0x01; data[2] 0x00; data[3] 0x01; myQueue.Enqueue(0, myUsart.Data_Pack(data, 0x00)); } else if (arr[i] BA开) { byte[] data new byte[4]; data[0] 0x04; data[1] 0x02; data[2] 0x00; data[3] 0x01; myQueue.Enqueue(0, myUsart.Data_Pack(data, 0x00)); } } UIMessageTip.ShowOk(泵浦 message, 3000, true); Thread.Sleep(10); // 如果需要返回确认 //byte[] response Encoding.UTF8.GetBytes(OK\n); //server.Write(response, 0, response.Length); } }); th.IsBackground true; th.Start(); #endregion }结语接收到message字符串根据字符串对其进行相应操作根据需求进行修改总的来说就说另类的跨工程交互操作