一、MSMQ简介
MSMQ(微软消息队列)是Windows操作系统中消息应用程序的基础,是用于创建分布式、松散连接的消息通讯应用程序的开发工具。消息队列
和电子邮件有着很多相似处,他们都包含多个属性,用于保存消息,消息类型中都指出发送者和接收者的地址;然而他们的用处却有着很大的
区别:消息队列的发送者和接收者是应用程序,而电子邮件的发送者和接收者通常是人。如同电子邮件一样,消息队列的发送和接收也不需要
发送者和接收者同时在场,可以存储在消息队列或是邮件服务器中。
二、消息队列的安装
默认情况下安装操作系统是不安装消息队列的,你可以在控制面板中找到添加/删除程序,然后选择添加/删除Windows组件一项,然后选择应
用程序服务器,双击它进入详细资料中选择消息队列一项进行安装,如图:
![mq1.JPG](https://i-blog.csdnimg.cn/blog_migrate/3be12dff617eb93734fda63a840b4d75.jpeg)
![mq2.JPG](https://i-blog.csdnimg.cn/blog_migrate/17515362c7146d5164d8a57e5b148319.jpeg)
![mq3.JPG](https://i-blog.csdnimg.cn/blog_migrate/a5c8fa5895ada6ec5230ad5abfa515bf.jpeg)
三、消息队列类型
消息对列分为3类:
公共队列
MachineName\QueueName
能被别的机器所访问,如果你的多个项目中用到消息队列,那么你可以把队列定义为公共队列
专用队列
MachineName\Private$\QueueName
只针对于本机的程序才可以调用的队列,有些情况下为了安全起见定义为私有队列。
日志队列
MachineName\QueueName\Journal$
四、消息队列的创建
MessageQueue Mq=new MessageQueue(“.\\private$\\Mymq”);
通过Path属性引用消息队列的代码也十分简单:
MessageQueue Mq=new MessageQueue();
Mq.Path=”.\\private$\\Mymq”;
使用 Create 方法可以在计算机上创建队列:
System.Messaging.MessageQueue.Create(@".\private$\Mymq");
这里注意由于在C#中要记住用反斜杠将“\”转义。
由于消息对列所放置的地方经常改变,所以建议消息队列路径不要写死,建议放在配置文件中。
五、消息的发送
消息的发送可以分为简单消息和复杂消息,简单消息类型就是常用的数据类型,例如整型、字符串等数据;复杂消息的数据类型通常对应于系
统中的复杂数据类型,例如结构,对象等等。
Mq.Send("Hello!");
在这里建议你可以事先定义一个对象类,然后发送这个对象类的实例对象,这样以后无论在增加什么发送信息,只需在对象类中增加
相应的属性即可。
六、消息的接收和阅读
(1)同步接收消息
接收消息的代码很简单:
Mq.Receive();
Mq.Receive(TimeSpan timeout); //设定超时时间
Mq.ReceiveById(ID);
Mq.Peek();
通过Receive方法接收消息同时永久性地从队列中删除消息;
通过Peek方法从队列中取出消息而不从队列中移除该消息。
如果知道消息的标识符(ID),还可以通过ReceiveById方法和PeekById方法完成相应的操作。
(2)异步接受消息
利用委托机制:
MessQueue.ReceiveCompleted +=new ReceiveCompletedEventHandler(mq_ReceiveCompleted);
(3)消息阅读
在应用程序能够阅读的消息和消息队列中的消息格式不同,应用程序发送出去的消息经过序列化以后才发送给了消息队列
而在接受端必须反序列化,利用下面的代码可以实现:
public void mq_ReceiveCompleted(object sender, System.Messaging.ReceiveCompletedEventArgs e)
{
System.Messaging.Message m = MessQueue.EndReceive(e.AsyncResult);
m.Formatter = new System.Messaging.XmlMessageFormatter(new string[]{"System.String,mscorlib"});
Console.WriteLine("Message: " + (string)m.Body);
MessQueue.BeginReceive() ;
}
反序列化还有另一种写法:
m.Formatter = new XmlMessageFormatter ( new Type [] { typeof (string) } );
七、由于消息队列的代码有些是固定不便的,所以把这些代码封装成一个类方便以后使用:
1
using
System;
2
using
System.Messaging;
3
using
System.Threading;
5
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
namespace
LoveStatusService
7
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
8![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
9
/// Summary description for Msmq.
10
/// </summary>
11
public class Msmq
12![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
13
public Msmq()
14![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
15
//
16
// TODO: Add constructor logic here
17
//
18
}
19![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
21
private MessageQueue _messageQueue=null;
22
//最大并发线程数
23
private static int MAX_WORKER_THREADS=Convert.ToInt32( System.Configuration.ConfigurationSettings.AppSettings["MAX_WORKER_THREADS"].ToString());
24
//Msmq路径
25
private static string MsmqPath=System.Configuration.ConfigurationSettings.AppSettings["LoveStatusMQPath"];
26
//等待句柄
27
private WaitHandle[] waitHandleArray = new WaitHandle[MAX_WORKER_THREADS];
28
//任务类型
29
//1. Send Email 2. Send Message 3. Send Email and Message
30
private string TaskType=System.Configuration.ConfigurationSettings.AppSettings["TaskType"];
31
public MessageQueue MessQueue
32![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
33
get
34![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
35
36
if (_messageQueue==null)
37![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
38
if(MessageQueue.Exists(MsmqPath))
39![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
40
_messageQueue = new MessageQueue(MsmqPath);
41
}
42
else
43![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
44
_messageQueue = MessageQueue.Create(MsmqPath);
45
}
46
}
47
48![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
return _messageQueue;
50
}
51
}
52
53![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
54![ContractedSubBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
Private Method#region Private Method
55![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
56
private void mq_ReceiveCompleted(object sender, System.Messaging.ReceiveCompletedEventArgs e)
57![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
58
MessageQueue mqq = (MessageQueue)sender;
59
System.Messaging.Message m = mqq.EndReceive(e.AsyncResult);
60
//m.Formatter = new System.Messaging.XmlMessageFormatter(new string[]{"System.String,mscorlib"});
61![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
m.Formatter =new System.Messaging.XmlMessageFormatter(new Type[]
{typeof(UserObject)}) ;
62
//log.Info("Receive UserID: " + (string)m.Body) ;
63
UserObject obj=(UserObject)m.Body ;
64
long curUserId=obj.curUserID ;
65
long oppUserId=obj.oppUserID;
66
string curUserName=obj.curUserName;
67
string oppUserName=obj.oppUserName;
68
string curEmail=obj.curEmail ;
69
string oppEmail=obj.oppEmail;
70
string subject =obj.subject ;
71
string body=obj.body ;
72
//AppLog.log.Info("curUserId:"+curUserId) ;
73
//AppLog.log.Info("oppUserId:"+oppUserId) ;
74
AppLog.log.Info("==type="+TaskType) ;
75
switch(TaskType)
76![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
77
//Email
78
case "1":
79
EmailForMQ.SendEmailForLoveStatus(curEmail,oppEmail,curUserName,oppUserName,subject) ;
80
AppLog.log.Info("==Send to=="+oppEmail) ;
81
break;
82
//Message
83
case "2":
84
MessageForMQ.SendMessage(curUserId,oppUserId,subject,body) ;
85
AppLog.log.Info("==Send Msg to=="+oppUserId) ;
86
break;
87
//Email and Message
88
case "3":
89
EmailForMQ.SendEmailForLoveStatus(curEmail,oppEmail,curUserName,oppUserName,subject) ;
90
AppLog.log.Info("==Send to=="+oppEmail) ;
91
MessageForMQ.SendMessage(curUserId,oppUserId,subject,body) ;
92
AppLog.log.Info("==Send Msg to=="+oppUserId) ;
93
break;
94
default:
95
break;
96![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
97
}
98
mqq.BeginReceive() ;
99![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
100
}
101![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
102
#endregion
103![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
104![ContractedSubBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
Public Method#region Public Method
105![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
106
//一个将对象发送到队列的方法,这里发送的是对象
107
public void SendUserIDToMQ(object arr)
108![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
109
MessQueue.Send(arr) ;
110
Console.WriteLine("Ok") ;
111
Console.Read() ;
112
}
113![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
114
//同步接受队列内容的方法
115
public void ReceiveFromMQ()
116![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
117
Message ms=new Message() ;
118
119
//ms=MessQueue.Peek();
120
try
121![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
122
ms=MessQueue.Receive(new TimeSpan(0,0,5));
123
if(ms!=null)
124![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
125![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
ms.Formatter = new XmlMessageFormatter ( new Type []
{ typeof (string) } );
126
AppLog.log.Info((string)ms.Body) ;
127
}
128
}
129
catch(Exception ex)
130![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
131
132
}
133
134
135
}
136![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
137
//开始监听工作线程
138
public void startListen()
139![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
140
AppLog.log.Info("--Thread--"+MAX_WORKER_THREADS) ;
141
MessQueue.ReceiveCompleted +=new ReceiveCompletedEventHandler(mq_ReceiveCompleted);
142
143
//异步方式,并发
144
145
for(int i=0; i<MAX_WORKER_THREADS; i++)
146![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
147
// Begin asynchronous operations.
148
waitHandleArray[i] = MessQueue.BeginReceive().AsyncWaitHandle;
149
}
150![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
151
AppLog.log.Info("------Start Listen--------") ;
152![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
153
return;
154![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
155
}
156![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
157
158
//停止监听工作线程
159
public void stopListen()
160![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
161![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
162
for(int i=0;i<waitHandleArray.Length;i++)
163![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
164![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
165
try
166![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
167
waitHandleArray[i].Close();
168
}
169
catch
170![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
171
AppLog.log.Info("---waitHandleArray[i].Close() Error!-----") ;
172
}
173![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
174
}
175![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
176
try
177![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
178
// Specify to wait for all operations to return.
179
WaitHandle.WaitAll(waitHandleArray,1000,false);
180
}
181
catch
182![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
183
AppLog.log.Info("---WaitHandle.WaitAll Error!-----") ;
184
}
185
AppLog.log.Info("------Stop Listen--------") ;
186![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
187
}
188![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
189
#endregion
190
191
192![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
193
194
}
195
}
196
UserObject的代码
1
using
System;
2
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
namespace
Goody9807
4
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
5![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
6
/// 用与在MQ上传输数据的对象
7
/// </summary>
8
public class UserObject
9![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
10
public UserObject()
11![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
12
//
13
// TODO: Add constructor logic here
14
//
15
}
16![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
private long _curUserID;
18
public long curUserID
19![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
20
get
21![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
22
return _curUserID;
23
}
24
set
25![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
26
_curUserID=value;
27
}
28
}
29![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
private string _curUserName="";
31
public string curUserName
32![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
33
get
34![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
35
return _curUserName;
36
}
37
set
38![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
39
_curUserName=value;
40
}
41
}
42![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
private string _curEmail="";
44
public string curEmail
45![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
46
get
47![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
48
return _curEmail;
49
}
50
set
51![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
52
_curEmail=value;
53
}
54
}
55![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
56![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57
private long _oppUserID;
58
public long oppUserID
59![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
60
get
61![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
62
return _oppUserID;
63
}
64
set
65![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
66
_oppUserID=value;
67
}
68
}
69![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
70
private string _oppUserName="";
71
public string oppUserName
72![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
73
get
74![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
75
return _oppUserName;
76
}
77
set
78![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
79
_oppUserName=value;
80
}
81
}
82![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
83
private string _oppEmail="";
84
public string oppEmail
85![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
86
get
87![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
88
return _oppEmail;
89
}
90
set
91![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
92
_oppEmail=value;
93
}
94
}
95![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
96
private string _subject ="";
97
public string subject
98![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
99
get
100![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
101
return _subject;
102
}
103
set
104![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
105
_subject=value;
106
}
107
}
108![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
109
private string _body="";
110
public string body
111![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
112
get
113![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
114
return _body;
115
}
116
set
117![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
118
_body=value;
119
}
120
}
121
}
122
}
123
另一个同事写的封装类
1
using System;
2![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
using System.Threading;
4![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
using System.Messaging;
6![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
8![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
namespace Wapdm.SmsApp
10![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
12![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
14![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
/// <para>
16![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
/// A Logger implementation that writes messages to a message queue.
18![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
/// The default event formatter used is an instance of XMLEventFormatter
20![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
/// </para>
22![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
/// </summary>
24![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
public sealed class MsgQueue
26![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
28![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
30![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31
private const string BLANK_STRING = "";
32![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
private const string PERIOD = @".\private$"; //".";
34![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
private const string ELLIPSIS = "
";
36![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
37
38![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
private string serverAddress;
40![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
private string queueName;
42![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
private string queuePath;
44![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
45
46![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
47
private bool IsContextEnabled;
48![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
50![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
private MessageQueue queue;
52![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
54![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
private object queueMonitor = new object();
56![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57
58![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
private MsgQueue()
{}
60![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
61
62![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
63
public static MsgQueue mq = null;
64![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
65
public static WaitHandle[] waitHandleArray = new WaitHandle[Util.MAX_WORKER_THREADS];
66![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
67
68![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
69
public MsgQueue(string _serverAddress, string _queueName, string _summaryPattern)
70![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
71![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
72![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
73
if ((_serverAddress == null) || (_queueName == null) || (_summaryPattern == null))
74![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
75![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
76![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
77
throw new ArgumentNullException();
78![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
79
}
80![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
81
ServerAddress = _serverAddress;
82![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
83
QueueName = _queueName;
84![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
85
IsContextEnabled = true;
86![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
87
}
88![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
89
90![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
91
public MsgQueue(string _serverAddress, string _queueName)
92![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
93![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
94![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
95
if ((_serverAddress == null) || (_queueName == null))
96![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
97![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
98![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
99
throw new ArgumentNullException();
100![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
101
}
102![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
103
ServerAddress = _serverAddress;
104![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
105
QueueName = _queueName;
106![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
107
IsContextEnabled = true;
108![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
109
}
110![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
111
112![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
113
public MsgQueue(string _queueName)
114![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
115![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
116![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
117
if (_queueName == null)
118![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
119![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
120![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
121
throw new ArgumentNullException();
122![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
123
}
124![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
125
serverAddress = PERIOD;
126![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
127
QueueName = _queueName;
128![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
129
IsContextEnabled = true;
130![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
131
if ( IsContextEnabled == false )
132![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
133
throw new ArgumentNullException();
134![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
135
}
136![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
137
138![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
139
public string ServerAddress
140![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
141![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
142![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
143
get
144![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
145![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
146![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
147
return serverAddress;
148![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
149
}
150![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
151
set
152![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
153![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
154![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
155
if (value == null)
156![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
157![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
158![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
159
value = PERIOD;
160![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
161
}
162![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
163
value = value.Trim();
164![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
165
if (value.Equals(BLANK_STRING))
166![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
167![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
168![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
169
throw new ArgumentException("Invalid value (must contain non-whitespace characters)");
170![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
171
}
172![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
173
lock (queueMonitor)
174![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
175![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
176![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
177
serverAddress = value;
178![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
179
queuePath = serverAddress + '\\' + queueName;
180![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
181
InitializeQueue();
182![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
183
}
184![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
185
}
186![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
187
}
188![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
189
190![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
191
public string QueueName
192![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
193![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
194![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
195
get
196![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
197![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
198![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
199
return queueName;
200![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
201
}
202![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
203
set
204![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
205![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
206![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
207
if (value == null)
208![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
209![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
210![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
211
throw new ArgumentNullException();
212![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
213
}
214![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
215
value = value.Trim();
216![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
217
if (value.Equals(BLANK_STRING))
218![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
219![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
220![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
221
throw new ArgumentException("Invalid value (must contain non-whitespace characters)");
222![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
223
}
224![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
225
lock (queueMonitor)
226![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
227![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
228![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
229
queueName = value;
230![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
231
queuePath = serverAddress + '\\' + queueName;
232![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
233
InitializeQueue();
234![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
235
}
236![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
237
}
238![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
239
}
240![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
241
242![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
243
private void InitializeQueue()
244![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
245![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
246![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
247
lock (queueMonitor)
248![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
249![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
250![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
251
if (queue != null)
252![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
253![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
254![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
255![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{ queue.Close(); }
256![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
257![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
catch
{}
258![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
259
queue = null;
260![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
261
}
262![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
263
264![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
265
try
266![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
267![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
268![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
269
if(!MessageQueue.Exists(queuePath))
270![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
271
MessageQueue.Create(queuePath);
272![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
273
}
274![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
275![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
catch
{}
276![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
277
try
278![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
279![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
280![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
281
queue = new MessageQueue(queuePath);
282![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
283
queue.SetPermissions("EveryOne",MessageQueueAccessRights.FullControl);
284![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
285![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
queue.Formatter = new XmlMessageFormatter(new Type[]
{typeof(MoMsg)});
286![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
287
}
288![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
289
catch (Exception e)
290![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
291![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
292![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
293![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{ queue.Close(); }
294![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
295![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
catch
{}
296![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
297
queue = null;
298![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
299
throw new ApplicationException("Couldn't open queue at '" + queuePath + "': " + e.GetType().FullName + ": " + e.Message);
300![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
301
}
302![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
303
304![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
305
}
306![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
307
}
308![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
309
310![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
311
private void AcquireResources()
312![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
313![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
314![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
315
InitializeQueue();
316![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
317
}
318![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
319
320![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
321
public void ReleaseResources()
322![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
323![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
324![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
325
lock (queueMonitor)
326![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
327![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
328![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
329
if (queue != null)
330![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
331![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
332![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
333
try
334![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
335![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
336![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
337
queue.Close();
338![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
339
}
340![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
341![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
catch
{}
342![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
343
queue = null;
344![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
345
}
346![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
347
}
348![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
349
}
350![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
351
352![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
353
//阻塞方式
354![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
355
public MoMsg Read( )
356![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
357![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
358![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
359
MoMsg _event = null;
360![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
361
lock (queueMonitor)
362![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
363![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
364![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
365
if (queue == null)
366![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
367![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
368![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
369
InitializeQueue();
370![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
371
}
372![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
373
try
374![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
375![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
376![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
377
Message message = queue.Receive( new TimeSpan(0,0,1) );//等待10秒
378![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
379
_event = (MoMsg) (message.Body);
380![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
381
return _event;
382![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
383
}
384![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
385
catch (Exception )
386![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
387![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
388![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
389![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{ queue.Close(); }
390![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
391![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
catch
{}
392![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
393
queue = null;
394![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
395
}
396![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
397
}
398![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
399
return null;
400![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
401
}
402![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
403
404![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
405
public void Write(MoMsg _event)
406![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
407![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
408![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
409
if (_event == null)
410![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
411![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
412![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
413
return;
414![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
415
}
416![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
417
lock (queueMonitor)
418![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
419![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
420![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
421
try
422![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
423![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
424![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
425
if (queue == null)
426![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
427![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
428![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
429
InitializeQueue();
430![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
431
}
432![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
433
434![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
435
Message message = new Message();
436![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
437
message.Priority = _event.Priority;
438![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
439
message.Recoverable = true;
440![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
441
message.Body = _event; //eventFormatter.Format(_event);
442![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
443
444![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
445
queue.Send(message);
446![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
447
}
448![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
449
catch (Exception e)
450![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
451![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
452![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
453![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{ queue.Close(); }
454![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
455![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
catch
{}
456![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
457
queue = null;
458![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
459
Util.Log.log("Couldn't write Message (" + e.GetType().FullName + ": " + e.Message + ")");
460![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
461
}
462![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
463
}
464![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
465
}
466![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
467
468![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
469
public static bool statusTest()
470![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
471![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
472![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
473
bool reValue = false;
474![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
475
try
476![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
477![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
478![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
479
MessageEnumerator re = mq.queue.GetMessageEnumerator();
480![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
481
bool rev = re.MoveNext();
482![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
483
reValue = true;
484![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
485
}
486![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
487
catch
488![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
489![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
490![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
491
reValue = false;
492![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
493
}
494![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
495
496![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
497
return reValue;
498![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
499
}
500![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
501
502![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
503
public static void startListen()
504![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
505![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
506![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
507
mq = new MsgQueue(Util.MqName);
508![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
509
510![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
511
mq.queue.ReceiveCompleted +=new ReceiveCompletedEventHandler(queue_ReceiveCompleted);
512![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
513
514![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
515
//异步方式,并发
516![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
517
for(int i=0; i<Util.MAX_WORKER_THREADS; i++)
518![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
519![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
520![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
521
// Begin asynchronous operations.
522![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
523
waitHandleArray[i] =
524![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
525
mq.queue.BeginReceive().AsyncWaitHandle;
526![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
527
}
528![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
529
530![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
531
return;
532![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
533
}
534![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
535
536![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
537
public static void stopListen()
538![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
539![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
540![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
541
542![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
543
for(int i=0;i<waitHandleArray.Length;i++)
544![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
545![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
546![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
547
try
548![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
549![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
550![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
551
waitHandleArray[i].Close();
552![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
553
}
554![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
555
catch
556![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
557![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
558![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
559
//忽略错误
560![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
561
}
562![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
563
}
564![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
565
566![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
567
try
568![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
569![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
570![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
571
// Specify to wait for all operations to return.
572![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
573
WaitHandle.WaitAll(waitHandleArray,1000,false);
574![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
575
}
576![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
577
catch
578![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
579![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
580![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
581
//忽略错误
582![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
583
}
584![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
585
}
586![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
587
588![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
589
private static void queue_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
590![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
591![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
592![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
593
// Connect to the queue.
594![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
595
MessageQueue mqq = (MessageQueue)sender;
596![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
597
598![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
599
// End the asynchronous Receive operation.
600![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
601
Message m = mqq.EndReceive(e.AsyncResult);
602![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
603
604![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
605
Util.ProcessMo((MoMsg)(m.Body));
606![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
607
608![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
609
if(Util.isRunning)
610![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
611![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
612![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
613
// Restart the asynchronous Receive operation.
614![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
615
mqq.BeginReceive();
616![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
617
}
618![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
619
620![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
621
return;
622![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
623
}
624![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
625
}
626![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
627
}
628![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
629