一个程序多线程往消息队列中写消息,另一个程序多线程读取消息,每次读写队列前都使用了lock(msmq){}方式,但为何过了几天读取消息队列的线种为何死了?页此时还可以往队列中写消息,这是为什么?由于死在读取消息的地方,使得整个程序都好象死掉了一样,有谁有过类似的现象吗?谢谢

解决方案 »

  1.   

    实在是检查不出什么结果不来,应该不会有线程相互等的情况,每个都是从队列中读取数据,然后进行操作,try
    {
       lock(msmq)
       {
    message = msmq.Receive(new TimeSpan(0,0,0,1),MessageQueueTransactionType.Single);
        }
    }
    catch(MessageQueueException ex)
    {
       //超时
       if(ex.MessageQueueErrorCode==MessageQueueErrorCode.IOTimeout)
    continue;
    }