标识事件处理程序 c# 的上次订阅事件



我有一个银光应用程序,其中异步调用服务方法。我需要识别上次订阅的事件并执行特定操作。对于如下所示的示例。

foreach(var proj in lstProj)
{
 ServiceApi.CreateTemplateInfoAsync(proj.Id, proj.Name);
 ServiceApi.CreateTemplateInfoCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(ServiceApi_CreateTemplateInfoCompleted);
}

上面的实现迭代了 10 次,例如,我想知道最后一个订阅的事件并执行操作。

void ServiceApi_CreateTemplateInfoCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                LogErrorInfo(m_ClassName, "CreateTemplateInfoCompleted", e.Error.InnerException.Message, true);
            }
            UtilityApp.ServiceApi.CreateTemplateInfoCompleted -= ServiceApi_CreateTemplateInfoCompleted;
//Check a condition here to know there are no more subscribed events and do an operation.
If(no more subscriber for CreateTemplateInfoCompleted)
{
//Do something.
}
        }

我已经看到这可以从CreateTemplateInfoCompleted.GetInvocationList()中获得,但是我没有看到该方法显示在智能感知中或可用。请提供建议。

GetInvocationList()

多播委托的一种方法,仅当您的类拥有该事件时才可用。其他课程只能订阅/取消订阅活动。

在您的情况下,我建议保留用于订阅该事件的代表和其他列表,并使该列表与您的操作保持同步。像这样:List<EventHandler<System.ComponentModel.AsyncCompletedEventArgs>>每次订阅该活动时,将您的委托添加到此列表中,然后使用它。(如果您使用的是异步,请注意同步问题)

不过,最好的方法是为整个方法考虑更好的设计。

相关内容

  • 没有找到相关文章

最新更新