您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關怎么在C#利用命名管道Pipe實現進程通信,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
1.新建解決方案NamedPipeExample 新建兩個項目:Client和Server,兩者的輸出類型均為“Windows 應用程序”。整個程序的結構如下圖所示。
此Form1為Client的窗體,如下圖所示。
后端代碼,如下。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.IO.Pipes; using System.Security.Principal; namespace Client { public partial class Form1 : Form { NamedPipeClientStream pipeClient = new NamedPipeClientStream("localhost", "testpipe", PipeDirection.InOut, PipeOptions.Asynchronous, TokenImpersonationLevel.None); StreamWriter sw = null; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { try { pipeClient.Connect(5000); sw = new StreamWriter(pipeClient); sw.AutoFlush = true; } catch (Exception ex) { MessageBox.Show("連接建立失敗,請確保服務端程序已經被打開。"); this.Close(); } } private void btnSend_Click(object sender, EventArgs e) { if (sw != null) { sw.WriteLine(this.txtMessage.Text); } else { MessageBox.Show("未建立連接,不能發送消息。"); } } } }
此Form1為Server的窗體,如下圖所示
后端代碼,如下。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.IO.Pipes; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace Server { public partial class Form1 : Form { NamedPipeServerStream pipeServer = new NamedPipeServerStream("testpipe", PipeDirection.InOut, 1, PipeTransmissionMode.Message, PipeOptions.Asynchronous); public Form1() { InitializeComponent(); } private void textBox1_TextChanged(object sender, EventArgs e) { } private void Form1_Load(object sender, EventArgs e) { ThreadPool.QueueUserWorkItem(delegate { pipeServer.BeginWaitForConnection((o) => { NamedPipeServerStream pServer = (NamedPipeServerStream)o.AsyncState; pServer.EndWaitForConnection(o); StreamReader sr = new StreamReader(pServer); while (true) { this.Invoke((MethodInvoker)delegate { lsvMessage.Text = sr.ReadLine(); }); } }, pipeServer); }); } private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e) { } } }
關于怎么在C#利用命名管道Pipe實現進程通信就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。