本文整理汇总了C#中Handler.Invoke方法的典型用法代码示例。如果您正苦于以下问题:C# Handler.Invoke方法的具体用法?C# Handler.Invoke怎么用?C# Handler.Invoke使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Handler
的用法示例。
在下文中一共展示了Handler.Invoke方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: waitForService
/// <summary>
/// Helper method that waits for a service to start and runs a handler when it does.
/// This subscribes to and queries the DSS directory.
/// </summary>
/// <param name="serviceInfo"></param>
/// <param name="handler"></param>
private static void waitForService(ServiceInfoType serviceInfo, Handler<ServiceInfoType> handler)
{
var dirPort = DssEnvironment.ServiceForwarder<directory.DirectoryPort>(new Uri("dssp.tcp://localhost/directory"));
var notPort = new directory.DirectoryPort();
// Keep this flag to only run the handler once
bool ranHandler = false;
Object lockObj = new Object();
// Subscribe first, then query, to make sure we don't miss the service registering itself
DssEnvironment.LogInfo("Subscribing to directory");
Arbiter.Activate(DssEnvironment.TaskQueue, Arbiter.Choice(
dirPort.Subscribe(
new directory.SubscribeRequest()
{
QueryRecordList = new List<ServiceInfoType>() { serviceInfo },
NotificationCount = 1
},
notPort,
typeof(directory.Insert)),
delegate(SubscribeResponseType r)
{
DssEnvironment.LogInfo("Subscribed to directory!");
// Run handler if the service starts and we get the subscription notification
DssEnvironment.LogInfo("Activating subscription receive");
Arbiter.Activate(DssEnvironment.TaskQueue, Arbiter.Receive<directory.Insert>(false, notPort,
delegate(directory.Insert ins)
{
DssEnvironment.LogInfo("Got subscription notification!");
lock (lockObj)
{
if (ranHandler == false)
{
new Thread(new ThreadStart(delegate() { handler.Invoke(ins.Body.Record); })).Start();
ranHandler = true;
}
}
}));
},
delegate(Fault f)
{
lock (lockObj)
{
if (ranHandler == false)
{
new Thread(new ThreadStart(delegate() { handler.Invoke(null); })).Start();
ranHandler = true;
}
}
DssEnvironment.LogError("Fault received while subscribing to directory: " + Strings.FromFault(f));
}));
// Query directory, run handler if the service is already started
DssEnvironment.LogInfo("Querying directory");
Arbiter.Activate(DssEnvironment.TaskQueue, Arbiter.Choice(
dirPort.Query(new directory.QueryRequest() { QueryRecord = serviceInfo }),
delegate(directory.QueryResponse r)
{
DssEnvironment.LogInfo("Queried directory!");
lock (lockObj)
{
if (ranHandler == false && r.RecordList.Length > 0)
{
new Thread(new ThreadStart(delegate() { handler.Invoke(r.RecordList[0]); })).Start();
ranHandler = true;
}
}
},
delegate(Fault f)
{
//lock (lockObj)
//{
// if (ranHandler == false)
// {
// new Thread(new ThreadStart(delegate() { handler.Invoke(null); })).Start();
// ranHandler = true;
// }
//}
DssEnvironment.LogError("Fault received while querying directory: " + Strings.FromFault(f));
}));
}