zoukankan      html  css  js  c++  java
  • C# 使用 Windows 消息队列机制

    保存消息队列数据的本地磁盘地址:C:\WINDOWS\system32\msmq\storage

    注意:

       1,要使用 windows 消息队列机制,必须在该 windows操作系统中先安装“ windows 消息队列” 组件系统光盘中)

       2,要使用启用消息队列,必须先启动“Messenger服务传输客户端和服务器之间的 NET SEND 和 Alerter 服务消息。此服务与 Windows Messenger 无关。如果服务停止,Alerter 消息不会被传输。如果服务被禁用,任何直接依赖于此服务的服务将无法启动。);

    控件:

    Form1.Designer.cs
            private System.Windows.Forms.Button btnSendMessage;
            
    private System.Windows.Forms.Button btnEnumerateMessages;
            
    private System.Windows.Forms.TextBox txtMessages;
            
    private System.Windows.Forms.Button btnRemoveMessages;
            
    private System.Windows.Forms.Button btnSendHighestPriorityMessage;

    代码:

    复制代码
    代码
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Messaging;
    using System.Xml.Serialization;

    namespace MessageQueuingExample
    {
        
    public partial class Form1 : Form
        {
            
    //The . in the queueName represents localhost
            private const string queueName = ".\\Private$\\Liuq";
            
    //private const string queueName = "A405\\Private$\\Liuq";

            
    //We need this class-wide to access it in the methods.
            MessageQueue queue = null;

            
    public Form1()
            {
                InitializeComponent();
            }

            
    private void Form1_Load(object sender, EventArgs e)
            {
                
    //Create the queue if it doesn't exist.
                CreateQueue();
            }

            
    private void CreateQueue()
            {
                
    //Does the queue already exist??
                if (MessageQueue.Exists(queueName))
                    
    //Yes, it's already there.
                    queue = new MessageQueue(queueName);
                
    else
                    
    //No, we need to create it.
                    queue = MessageQueue.Create(queueName, false);
            }

            
    private void btnSendMessage_Click(object sender, EventArgs e)
            {
                
    //Instantiate our MessageContent object.
                MessageContent message = new MessageContent("Hello world!");

                
    //Send it to the queue.
                queue.Send(message, "Sample Message");

                MessageBox.Show("Message sent.""MSMQ");
            }

            
    private void btnEnumerateMessages_Click(object sender, EventArgs e)
            {
                
    //Clear the textbox.
                this.txtMessages.Clear();

                
    //Get all messages on the queue.
                System.Messaging.Message[] messages = queue.GetAllMessages();

                
    //Loop through the messages.
                foreach (System.Messaging.Message message in messages)
                {
                    
    //Set the formatter for the message.
                    message.Formatter = new System.Messaging.XmlMessageFormatter(new Type[1] { typeof(MessageContent) });

                    
    //Get the MessageContent object out of the message.
                    MessageContent content = (MessageContent)message.Body;

                    
    //Update the textbox.
                    this.txtMessages.Text += content.MessageText + " - " + content.CreationDate.ToString() + "\r\n";
                }
            }

            
    private void btnRemoveMessages_Click(object sender, EventArgs e)
            {
                
    //Purge all messages from the queue.
                queue.Purge();

                MessageBox.Show("Messages purged""MSMQ");
            }

            
    private void btnSendHighestPriorityMessage_Click(object sender, EventArgs e)
            {
                
    //Create a XmlSerializer for the object type we're sending.
                XmlSerializer serializer = new XmlSerializer(typeof(MessageContent));

                
    //Instantiate a new message.
                System.Messaging.Message queueMessage = new System.Messaging.Message();

                
    //Set the priority to Highest.
                queueMessage.Priority = MessagePriority.Highest;

                
    //Create our MessageContent object.
                MessageContent messageContent = new MessageContent("Hello world - IMPORTANT!");

                
    //Serialize the MessageContent object into the queueMessage.
                serializer.Serialize(queueMessage.BodyStream, messageContent);

                
    //Send the message.
                queue.Send(queueMessage, "HIGH PRIORITY");

                MessageBox.Show("Important message sent.""MSMQ");
            }
        }
    }
    复制代码
  • 相关阅读:
    leetcode 33. Search in Rotated Sorted Array
    leetcode 32. Longest Valid Parentheses
    leetcode 28. Implement strStr()
    leetcode 27. Remove Element
    leetcode 26. Remove Duplicates from Sorted Array
    leetcode 24. Swap Nodes in Pairs
    leetcode 22. Generate Parentheses
    树莓派的频率管理和热控制
    sql执行insert插入一条记录同时获取刚插入的id
    全程直播个人博客重构过程,采用springboot+dubbo+jpa技术栈。
  • 原文地址:https://www.cnblogs.com/sunny_blog/p/2582826.html
Copyright © 2011-2022 走看看