| shuai's profile娱乐精神PhotosBlog | Help |
|
1/16/2007 让MessageQueue.BeginReceive()阻塞让MessageQueue.BeginReceive()阻塞
我发现MessageQueue.BeginReceive()跟本不会阻塞
虽然文档上是这样写: 启动一个没有超时设定的异步接收操作。直到队列中出现消息时,才完成此操作。 但是事实证明不起作用
并且希望做到事件式触发 以及接收消息完一个后接收消息下一个 于是我使用了ManualResetEvent:
代码:
public class Program { private static ManualResetEvent signal = new ManualResetEvent(false); public static void Main() { ReceiveMessage(); } public static void ReceiveMessage()
{ try { MessageQueue messageQueue = new MessageQueue(".\\Private$\\StaticPageQueue"); messageQueue.Formatter = new BinaryMessageFormatter(); messageQueue.ReceiveCompleted += new ReceiveCompletedEventHandler(ReceiveCompleted); while (true)
{ Console.WriteLine("Receiving...");
messageQueue.BeginReceive();
signal.Reset(); //允许线程阻止
signal.WaitOne(); //阻止当前线程。直到收到信号 } } catch (Exception e) { Console.WriteLine(e.Message); } } private static void ReceiveCompleted(Object sender, ReceiveCompletedEventArgs asyncResult)
{ try { MessageQueue messageQueue = (MessageQueue)sender; Message message = messageQueue.EndReceive(asyncResult.AsyncResult); StaticPageMessage spMessage = (StaticPageMessage)message.Body; Console.WriteLine(spMessage.StaticPageType); signal.Set(); //允许阻塞线程继续 } catch (Exception e) { Console.WriteLine(e.Message); } } } |
|
|