1.在服務電腦上打開 消息隊列windows
①進入控制面板》程序》啓用或關閉windows功能多線程
②將須要的勾選(我本身全選了哈哈哈)併發
③個人電腦 右鍵 打開管理 見到消息隊列 在專用隊列上新建專用隊列測試
⑤填寫名稱還有選擇是不是事務性ui
好到這裏就基本準備完成this
下面就要使用隊列 來發送消息spa
//建立消息隊列 併發送消息到隊列 try { //鏈接到本地新建立的隊列 MessageQueue myQueue = new MessageQueue(".\\private$\\test2"); //建立一個消息 System.Messaging.Message myMessage = new System.Messaging.Message(); //給消息體賦值 myMessage.Body = "你好我是消息體"; myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) }); //發送消息到隊列中(建立隊列時勾選了事務性以後 不能直接使用 public void Send(object obj) 這個方法 由於其不支持事務) // 我要使用下面這個支持事務的發送方法 myQueue.Send(myMessage,System.Messaging.MessageQueueTransactionType.Single); } catch (ArgumentException ex) { Console.WriteLine(ex.Message); }
發完消息以後就要接收消息線程
消息的接受使用Receive()方法3d
可是該方法會阻塞線程code
因此建議將其放到一個獨立的線程中,不讓其影響其餘線程的運行
//建立一個任務 讓其不斷的在接收消息隊列發出的消息 Task t = Task.Factory.StartNew(() => { while (true) { //建立隊列 要跟發消息的隊列同一個名稱 MessageQueue mq = new MessageQueue(@".\private$\test2"); // 若是不用多線程就會阻塞在Receive System.Messaging.Message m = mq.Receive(); //定義內容格式 m.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) }); //接收到消息後 回去更新主線程的UI界面 Action<String> AsyncUIDelegate = delegate (string n) { this.ReceiveText2.Text = n; //對ui的操做 };//定義一個委託 this.ReceiveText2.Invoke(AsyncUIDelegate, new object[] { m.Body.ToString() }); } });
測試效果:
啊啊啊啊 要記住勾選了事務性 不要用send(object ) 這個方法呀