判断MessageQueue是否有数据

jone_fox 2007-03-05 03:53:39
请问如何判断MessageQueue队列中是否有数据
BeginReceive ,BeginPeek ,Receive都不能判断出.
...全文
435 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jone_fox 2007-03-06
  • 打赏
  • 举报
回复
目前我对MessageQueue的了解,好象没有办法知道MSMQ中没有消息.
不知各位有什么意见?
jone_fox 2007-03-06
  • 打赏
  • 举报
回复
判断MSMQ中有没有数据的目的是:当发现MSMQ中没有消息,就结束此线程.
苏陌Bubble 2007-03-06
  • 打赏
  • 举报
回复
.......
jone_fox 2007-03-06
  • 打赏
  • 举报
回复
如果 "重开一个线程,Peek阻塞该线程",好到达BeginReceive发现MSMQ没有数据继续阻塞,
此时再"重开一个线程,Peek阻塞该线程"(现在已经有2个线程阻塞)如此重复阻塞的线程将越来
越多,RAM将越来越大(但是我们什么都没有做,只是打开了程式).
lxsfg 2007-03-06
  • 打赏
  • 举报
回复
不明白lz要干什么,判断MSMQ中有没有数据干什么?有就处理,没有就不处理?这样岂不是脱裤子放屁?不明白
苏陌Bubble 2007-03-06
  • 打赏
  • 举报
回复
老兄,阻塞的话,自己变通一下就行了呀。。
重开一个线程,Peek阻塞该线程,
完成时引发PeekCompleted ,捕获后通知主线程
最好是主线程有一个类实现一个你自己的接口
IPeekNotify

onPeekReturn(..);

,完成后直接通过接口通知。。具体的处理在主线程的onPeekReturn中完成即可。

个人意见,如有不妥,请大家指教
jone_fox 2007-03-06
  • 打赏
  • 举报
回复
MSDN上这样说:"BeginPeek 用在异步处理中,$$$===当队列中有可用消息时===$$$,用来引发 PeekCompleted 事件。"

BeginPeek "启动一个没有超时设定的异步查看操作。直到队列中出现消息时,才完成此操作。"
-----如果没有消息BeginPeek是一直阻塞的.


期待正解....
pele007 2007-03-06
  • 打赏
  • 举报
回复
正巧刚写过MSMQ的包.用peekcompleted事件+beginpeek方法
jone_fox 2007-03-06
  • 打赏
  • 举报
回复
有没有高人,帮帮我.
谢谢了!
jone_fox 2007-03-06
  • 打赏
  • 举报
回复
目前我的解决方案
try
{
EndReceive();
}
catch
{ retrun;}

有人有更好的方法,分享吗?
jone_fox 2007-03-05
  • 打赏
  • 举报
回复
期待正解....
jone_fox 2007-03-05
  • 打赏
  • 举报
回复
Peek是应用程序可能无限期的(如果没有消息).
苏陌Bubble 2007-03-05
  • 打赏
  • 举报
回复
MessageQueue.Peek()方法,返回但不删除队列中的一条记录,如果为Null,即说明队列为空,反之说明有数据,可以调用Receive方法获取。大概如下:
while( youQueue.Peek() != null)
{
msgTmp = youQueue.Receive();
......
......
}
best8625 2007-03-05
  • 打赏
  • 举报
回复
友情UP
苏陌Bubble 2007-03-05
  • 打赏
  • 举报
回复
peek
jone_fox 2007-03-05
  • 打赏
  • 举报
回复
没人知道吗?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧