当前位置: 首页>>代码示例>>C#>>正文


C# Handler.Invoke方法代码示例

本文整理汇总了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));
                }));

        }
开发者ID:SamLin95,项目名称:cs3630,代码行数:89,代码来源:Robot.cs


注:本文中的Handler.Invoke方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。