微軟 消息隊列 MessageQueue 簡單使用


1.在服務電腦上打開 消息隊列

①進入控制面板》程序》啟用或關閉windows功能

 

②將需要的勾選(我自己全選了哈哈哈)

③我的電腦 右鍵 打開管理 見到消息隊列 在專用隊列上新建專用隊列

 

 ⑤填寫名稱還有選擇是否是事務性

 

好到這里就基本准備完成

 

下面就要使用隊列 來發送消息

           //創建消息隊列 並發送消息到隊列
            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()方法

但是該方法會阻塞線程

所以建議將其放到一個獨立的線程中,不讓其影響其他線程的運行

  

            //創建一個任務 讓其不斷的在接收消息隊列發出的消息
            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 ) 這個方法呀

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM