2

我在Windows 服务中使用MSMQ 。
当服务暂停时,我想关闭 MSMQ并在服务恢复时重新打开它。

代码如下所示:

启动

_mq.ReceiveCompleted += this.ReceiveCompletedHandler;
_mq.BeginReceive();

暂停

// MessageQueue.ClearConnectionCache();
_mq.Close();

继续

与 OnStart 相同

现在,这可以工作,但是在.Close()抛出异常之后ReceiveCompletedHandler

private void ReceiveCompletedHandler(object sender, ReceiveCompletedEventArgs e)
{
    Message message = this.mq.EndReceive(e.AsyncResult); // or e.Message
    // do stuff
}

异常详情:

类型:MessageQueueException
消息:null
错误代码:消息-2147467259
队列错误代码:-1073741536

如何防止这种情况发生

4

1 回答 1

1

大卫,

在您的 OnPause 尝试在调用 Close() 方法之前执行此操作:

_mq.ReceiveCompleted -= this.ReceiveCompletedHandler;

于 2014-12-30T10:54:51.993 回答