代码之家  ›  专栏  ›  技术社区  ›  Pure.Krome

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

  •  5
  • Pure.Krome  · 技术社区  · 14 年前

    the following event :-

    UploadFolderMessageQueue.ReceiveCompleted += UploadMSMQReceiveCompleted;
    

    工作得很好,当消息队列 接收完成 事件激发,我的委托处理它。

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

    事件 'System.Messaging.MessageQueue消息队列.接收完成' 只能出现在左侧 of+=或-=

    3 回复  |  直到 14 年前
        1
  •  14
  •   TheVillageIdiot    14 年前

    不能从订阅服务器到事件执行此操作。只有publisher可以检查是否有订户。您需要使用类中的其他机制跟踪订阅,例如:

    UploadFolderMessageQueue.ReceiveCompleted += UploadMSMQReceiveCompleted;
    bool handlerAttached=true;
    

    然后你可以用这个:

    if(handlerAttached)
    {
        //DO YOUR STUFF
    }
    
        2
  •  19
  •   bniwredyc    14 年前

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

    UploadFolderMessageQueue.ReceiveCompleted -= UploadMSMQReceiveCompleted;
    UploadFolderMessageQueue.ReceiveCompleted += UploadMSMQReceiveCompleted;
    

    如果 UploadFolderMessageQueue.ReceiveCompleted null 上传adFolderMessageQueue.ReceiveCompleted已完成 UploadMSMQReceiveCompleted 是该事件的唯一一个事件处理程序)。

        3
  •  0
  •   bright    14 年前

    1) 如果您有权访问这个类的源代码,您可以添加一个方法或属性来执行测试并返回一个布尔结果,您可以在订阅之前检查这个结果。

    3) 如果无法更改声明类,并且正在检查来自自己代码以外的代码的订阅,则似乎没有解决方案。