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