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 " );
        }
    }
}
复制代码

转载于:https://www.cnblogs.com/sunny_blog/archive/2012/07/09/2582826.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值