如何在.NET中检查是否已订阅某个事件?

Pur*_*ome 5 .net c# events

在我的代码中,我订阅了以下事件: -

UploadFolderMessageQueue.ReceiveCompleted += UploadMSMQReceiveCompleted;
Run Code Online (Sandbox Code Playgroud)

工作得很好,当Message Queue的Recieved Completed事件触发时,我的代表处理它.

现在,我想在订阅之前检查事件是否已订阅.我这样做时出现编译时错误: -

// Compile Time Errors...
if (UploadFolderMessageQueue.ReceiveCompleted == null)
    {
        UploadFolderMessageQueue.ReceiveCompleted += UploadMSMQReceiveCompleted;
        UploadFolderMessageQueue.Formatter = 
            new XmlMessageFormatter(new[] {typeof (string)});
    }
Run Code Online (Sandbox Code Playgroud)

事件"System.Messaging.MessageQueue.ReceiveCompleted"只能出现在+ =或左手侧 - =

我知道这很简单......但我很难过:(有什么建议吗?

bni*_*dyc 18

如果您需要确保只有一个订户,您可以使用以下代码:

UploadFolderMessageQueue.ReceiveCompleted -= UploadMSMQReceiveCompleted;
UploadFolderMessageQueue.ReceiveCompleted += UploadMSMQReceiveCompleted;
Run Code Online (Sandbox Code Playgroud)

如果UploadFolderMessageQueue.ReceiveCompleted是,null则第一行将不执行任何操作,在其他情况下,将删除事件处理程序.这意味着UploadFolderMessageQueue.ReceiveCompleted将始终只有一个订阅者(当然,如果该UploadMSMQReceiveCompleted事件是该事件的唯一一个事件处理程序).


The*_*iot 14

你不能从订阅者到活动这样做.只有发布商才能检查是否有订阅者.您需要使用类中的其他机制跟踪订阅,例如:

UploadFolderMessageQueue.ReceiveCompleted += UploadMSMQReceiveCompleted;
bool handlerAttached=true;
Run Code Online (Sandbox Code Playgroud)

然后你可以用这个:

if(handlerAttached)
{
    //DO YOUR STUFF
}
Run Code Online (Sandbox Code Playgroud)