在我的代码中的某个时刻,我订阅了 the following event :-
UploadFolderMessageQueue.ReceiveCompleted += UploadMSMQReceiveCompleted;
效果很好,当消息队列的 Recieved Completed 事件触发时,我的委托(delegate)会处理它。
现在,我想在订阅之前检查事件是否已被订阅。当我这样做时出现编译时错误:-
// Compile Time Errors...
if (UploadFolderMessageQueue.ReceiveCompleted == null)
{
UploadFolderMessageQueue.ReceiveCompleted += UploadMSMQReceiveCompleted;
UploadFolderMessageQueue.Formatter =
new XmlMessageFormatter(new[] {typeof (string)});
}
The event 'System.Messaging.MessageQueue.ReceiveCompleted' can only appear on the left hand side of += or -=
我知道这非常简单..但我很难过:(有什么建议吗?
最佳答案
如果您需要确保只有一个订阅者可以使用以下代码:
UploadFolderMessageQueue.ReceiveCompleted -= UploadMSMQReceiveCompleted;
UploadFolderMessageQueue.ReceiveCompleted += UploadMSMQReceiveCompleted;
如果 UploadFolderMessageQueue.ReceiveCompleted
是 null
那么第一行什么都不做,否则事件处理程序将被删除。这意味着 UploadFolderMessageQueue.ReceiveCompleted
将始终只有一个订阅者(当然如果 UploadMSMQReceiveCompleted
是该事件的唯一一个事件处理程序)。
关于c# - 在 .NET 中如何检查事件是否已被订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3597950/