c# - 在 .NET 中如何检查事件是否已被订阅?

标签 c# .net events

在我的代码中的某个时刻,我订阅了 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.ReceiveCompletednull 那么第一行什么都不做,否则事件处理程序将被删除。这意味着 UploadFolderMessageQueue.ReceiveCompleted 将始终只有一个订阅者(当然如果 UploadMSMQReceiveCompleted 是该事件的唯一一个事件处理程序)。

关于c# - 在 .NET 中如何检查事件是否已被订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3597950/

相关文章:

c# - 在 UWP 应用程序中处理 Dispatcher 异常

c# - 在虚拟模式下更改 'DataGridView' 的单元格背景颜色

c# - 退出后保留程序的数据

c# - LinqToSql - 不允许在查询中显式构造实体类型 '{0}'

c# - 向 StackExchange Api 发出请求

C# static - MSDN 上的定义是什么意思?

c# - 当我编辑代码时 ASP.NET 没有任何变化

在对象中时未触发 JavaScript mousemove 事件

带有自定义参数的 C# 事件

javascript - 如何在 Javascript 中的文本选择更改时捕获 iOS Safari 事件?