C# 回调函数C中的回调函数#

C# 回调函数C中的回调函数#,c#,.net,delegates,callback,C#,.net,Delegates,Callback,尝试设置一个服务器工具,该工具订阅服务,并在事件发生时通过回调通知我。我让订阅部分工作,当一个事件被触发时,它会点击回调,但我在一个库中有这个,我想把它放到主项目中。我想用一个委托来做,但想不出语法 ClientSubscriber.cs 那么,如何将元素响应信息返回到主项目?如果您想要回调,则需要指定一个作为参数。我做了一些假设,但这应该是可行的: public bool Subscribe(string type, Action callback) { bool IsSubscrib

尝试设置一个服务器工具,该工具订阅服务,并在事件发生时通过回调通知我。我让订阅部分工作,当一个事件被触发时,它会点击回调,但我在一个库中有这个,我想把它放到主项目中。我想用一个委托来做,但想不出语法

ClientSubscriber.cs


那么,如何将元素响应信息返回到主项目?

如果您想要回调,则需要指定一个作为参数。我做了一些假设,但这应该是可行的:

public bool Subscribe(string type, Action callback)
{
    bool IsSubscribed = false;
    try
    {
        switch (type)
        {
            case "Elements":
            {
                logger.Info("Subscribing toPublisher");
                Subscriber.SubscribeToElements((e,t) => ElementResponse(e,t,callback));
                logger.Info("Subscription Completed");
                IsSubscribed = true;
                break;
            }
        }
    }    
    catch (Exception ex)
    {
        logger.Error(ex);
    }

    return IsSubscribed;
}

public void ElementResponse(Element element, SubscriptionEvent.ActionType eventActionType, Action callback)
{
    try
    {
        //  stuff to Do
        callback();
    }
    catch (Exception ex)
    {
        logger.Error(ex);
        throw;
    }
}
我使用了一个委托,但任何东西都可以放在它的位置,只要你有办法调用它。程序代码为:

static void Main(string[] args)
{
    SubscriberClient client = new SubscriberClient();
    client.Subscribe("SlateQueueElements", () => 
    {
       Console.WriteLine("Calling back...");
    });

    while (true)
    {
        ConsoleKeyInfo keyInfo = Console.ReadKey(true);

        if (keyInfo.Key == ConsoleKey.X)
            break;
    }
}

行了,谢谢你。。结果发现订阅提供了一个类型为object的参数,我可以通过它。我最终使用了一个委托,但我仍然可以看到它在哪里工作。再次感谢!
public bool Subscribe(string type, Action callback)
{
    bool IsSubscribed = false;
    try
    {
        switch (type)
        {
            case "Elements":
            {
                logger.Info("Subscribing toPublisher");
                Subscriber.SubscribeToElements((e,t) => ElementResponse(e,t,callback));
                logger.Info("Subscription Completed");
                IsSubscribed = true;
                break;
            }
        }
    }    
    catch (Exception ex)
    {
        logger.Error(ex);
    }

    return IsSubscribed;
}

public void ElementResponse(Element element, SubscriptionEvent.ActionType eventActionType, Action callback)
{
    try
    {
        //  stuff to Do
        callback();
    }
    catch (Exception ex)
    {
        logger.Error(ex);
        throw;
    }
}
static void Main(string[] args)
{
    SubscriberClient client = new SubscriberClient();
    client.Subscribe("SlateQueueElements", () => 
    {
       Console.WriteLine("Calling back...");
    });

    while (true)
    {
        ConsoleKeyInfo keyInfo = Console.ReadKey(true);

        if (keyInfo.Key == ConsoleKey.X)
            break;
    }
}