C#消息队列应用程序 -2,C#消息队列应用程序 -2
【 tulaoshi.com - ASP.NET 】
在这个数组内部,CWorker 类创建了 CWorkerThread类的一个实现版  一旦所有的对象都已创建,就可以通过调用每个线程对象的 Start方 
法来启动它们: 
foreach(CWorkerThread cThread in aThreads) 
  cThread.Start(); 
  Stop、Pause 和 Continue 方法在 foreach循环里执行的操作类似。 
Stop方法具有如下的垃圾收集操作: 
GC.SuppressFinalize(this); 
  在类析构函数中将调用 Stop 方法,这样,在没有显式调用 Stop 方 
法的情况下也可以正确地终止对象。如果调用了 Stop 方法,将不需要析 
构函数。SuppressFinalize方法能够防止调用对象的 Finalize 方法(析 
构函数的实际实现)。 
CWorkerThread 抽象类
  CWorkerThread 是一个由 CWorkerThreadAppSpecifc、CWorkerThread 
RoundRobin 和 CWorkerThreadAssembly继承的抽象类。无论如何处理消 
息,队列的大部分处理是相同的,所以 CWorkerThread类提供了这一功能。 
这个类提供了抽象方法(必须被实际方法替代)以管理资源和处理消息。 
  类的工作再一次通过 Start、Stop、Pause 和 Continue 方法来实现。 
在 Start方法中引用了输入和错误队列。在 .NET 框架中,消息由 System. 
Messaging 名称空间处理: 
// 尝试打开队列,并设置默认的读写属性 
MessageQueue mqInput = new MessageQueue(sInputQueue); 
mqInput.MessageReadPropertyFilter.Body = true; 
mqInput.MessageReadPropertyFilter.AppSpecific = true; 
MessageQueue mqError = new MessageQueue(sErrorQueue); 
// 如果使用 MSMQ COM,则将格式化程序设置为 ActiveX 
mqInput.Formatter = new ActiveXMessageFormatter(); 
mqError.Formatter = new ActiveXMessageFormatter(); 
  一旦定义了消息队列引用,即会创建一个线程用于实际的处理函数 
(称为 ProcessMessages)。在 .NET 框架中,使用 System.Threading 
名称空间很容易实现线程处理: 
procMessage = new Thread(new ThreadStart(ProcessMessages)); 
procMessage.Start(); 
  ProcessMessages 函数是基于 Boolean值的处理循环。当数值设为 
False,处理循环将终止。因此,线程对象的 Stop 方法只设置这一Boolean 
值,然后关闭打开的消息队列,并加入带有主线程的线程: 
// 加入服务线程和处理线程 
bRun = false; 
procMessage.Join(); 
// 关闭打开的消息队列 
mqInput.Close(); 
mqError.Close(); 
Pause 方法只设置一个 Boolean 值,使处理线程休眠半秒钟:
if (bPause) 
  Thread.Sleep(500); 
  最后,每一个 Start、Stop、Pause 和 Continue 方法将调用抽象的 
OnStart 、OnStop、OnPause 和 OnContinue 方法。这些抽象方法为实现 
的类提供了挂钩,以捕获和释放所需的资源。 
  ProcessMessages 循环具有如下基本结构: 
●接收Message。 
●如果Message具有成功的Receive,则调用抽象ProcessMessage方法。 
●如果Receive或ProcessMessage失败,将Message发送至错误队列中。 
Message mInput; 
try 
{ 
  // 从队列中读取,并等候 1 秒 
  mInput = mqInput.Receive(new TimeSpan(0,0,0,1)); 
} 
catch (MessageQueueException mqe) 
{ 
  // 将消息设置为
                        
来源:http://www.tulaoshi.com/n/20160129/1492016.html
看过《C#消息队列应用程序 -2》的人还看了以下文章 更多>>