微軟 消息隊列 MessageQueue 簡單使用

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 ) 這個方法呀

相關文章
相關標籤/搜索