http://blog.csdn.net/cml2030/article/details/2172854

http://blog.163.com/weizhiyong_111/blog/static/28597099200981145347563/

 //配置操作执行的委托
        /// <summary>
        /// 手机号信息配置执行委托
        /// </summary>
        /// <param name="statusString">包含操作失败的原因信息</param>
        /// <returns>True表示手机号信息配置成功,False表示手机号信息配置失败,失败原因在statusString参数中</returns>
        private delegate bool ConfigWarnInfoForTelNumsHandler(out string statusString);

子鼠 2014/6/26 20:00:37

ConfigWarnInfoForTelNumsHandler configWarnInfoForTelNumsHandler = ConfigWarnInfoForTelNumsHandlerProcess;

子鼠 2014/6/26 20:00:49

configWarnInfoForTelNumsHandler.BeginInvoke(out statusString, ConfigWarnInfoForTelNumsHandlerProcessCallBack, null);

子鼠 2014/6/26 20:01:12

private bool ConfigWarnInfoForTelNumsHandlerProcess(out string statusString)
        {
            try
            {
                byte telNumberCount = (byte)0;
                string[] telInfoStringArray = new string[5];
                GenerateTelNumberCountAndTelInfoStringArray(out telNumberCount, telInfoStringArray);
                //ExcuteConfigWarnInfoOfTelNumber此函数下发指令
                if (CommandRequestExcutingManager.ExcuteConfigWarnInfoOfTelNumber(telNumberCount, telInfoStringArray))
                {
                    //将事件状态设置为非终止状态,从而导致线程受阻。
                    CommunicationManager.Instance.Commnication.ThreadSyncEventDictionary[DataAnalysisType.ConfigWarnInfoForTelNum].Reset();

//等待90秒,看是否能收到信号
                    if (CommunicationManager.Instance.Commnication.ThreadSyncEventDictionary[DataAnalysisType.ConfigWarnInfoForTelNum].WaitOne(130000))
                    {
                        if (telInfoConfigStatus)//配置成功之后,将telInfoConfigStatus置为true
                        {
                            //statusString = string.Empty;
                            statusString = "配置手机号码到短信模块成功";
                            return true;
                        }
                        else
                        {
                            statusString = "130秒内手机号信息配置失败!";
                            return false;
                        }
                    }
                    else//150秒没有响应
                    {
                        statusString = "[130秒内没有响应]与控制器通信失败,可能是接线松动,也可能是控制器电池耗尽等原因";
                        return false;
                    }
                }
                else
                {
                    statusString = "USB线连接异常,您可能需要重启软件,给您带来的不便,请谅解";
                    return false;
                }
            }
            catch (Exception ex)
            {
                LogService.LogManager.Instance.ProcessUIExceptionLog(ex);
                statusString = ex.Message;
                return false;
            }
        }

子鼠 2014/6/26 20:01:42

/// <summary>
        /// 异步执行手机号信息配置回调函数
        /// </summary>
        /// <param name="ar">异步执行手机号信息配置的结果</param>
        private void ConfigWarnInfoForTelNumsHandlerProcessCallBack(IAsyncResult ar)
        {
            if (InvokeRequired)
            {
                Invoke(new AsyncCallback(ConfigWarnInfoForTelNumsHandlerProcessCallBack), ar);
            }
            else
            {
                ConfigWarnInfoForTelNumsHandler configWarnInfoForTelNumsAction = ((AsyncResult)ar).AsyncDelegate
                    as ConfigWarnInfoForTelNumsHandler;
                //让状态滚动条停止
                rItemMarqueeProgressBar.Stopped = true;
                 //调整UI上的显示
                grpTelConfig.Enabled = true;
                
                string failureStatus = string.Empty;
                //当使用BeginInvoke异步调用方法时,如果方法未执行完,EndInvoke方法就会一直阻塞,直到被调用的方法执行完毕
                if (configWarnInfoForTelNumsAction.EndInvoke(out failureStatus, ar))
                {
                    barStatusStaticItem.Caption = "预警手机号信息配置成功!";
                    barStatusStaticItem.Appearance.ForeColor = Color.Green;
                    BandTogvWarnValueInfo();
                    xtraTabControl1.SelectedTabPageIndex = 2;
                }
                else
                {
                    barStatusStaticItem.Caption = string.Format("预警手机号信息配置失败,{0}!", failureStatus);
                    barStatusStaticItem.Appearance.ForeColor = Color.Red;
                }
            }
        }
20:02:23
子鼠 2014/6/26 20:02:23

CommunicationManager.Instance.Commnication.ThreadSyncEventDictionary[DataAnalysisType.ConfigWarnInfoForTelNum].Set();

委托的begininvoke的更多相关文章

  1. C# 对委托的BeginInvoke,EndInvoke 及Control 的BeginInvoke,EndInvoke 的理解

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. 委托的BeginInvoke和EndInvoke方法

    .NET Framework 允许异步调用任何方法,为了实现异步调用目标,需要定义与被调用方法具有相同签名的委托.公共语言运行时会自动使用适当的签名为该委托定义 BeginInvoke 和 EndIn ...

  3. 异步使用委托delegate --- BeginInvoke和EndInvoke方法

    当我们定义一个委托的时候,一般语言运行时会自动帮委托定义BeginInvoke 和 EndInvoke两个方法,这两个方法的作用是可以异步调用委托. 方法BeginInvoke有两个参数: Async ...

  4. 转:C# 对委托的BeginInvoke,EndInvoke 及Control 的BeginInvoke,EndInvoke 的理解

    转载自:http://www.cnblogs.com/easyfrog/p/3141269.html using System; using System.Collections.Generic; u ...

  5. 使用委托的BeginInvoke方法来完成复杂任务的操作

    现在假设我有这样一个窗体(包含一个进度条和一个按钮与两个文本框),在第一个文本框中输入一个数字进行阶乘运算,在此过程中进度条与运算进度保持一致,同时可以在第二个文本框中进行其它工作(比如输入).对付这 ...

  6. 读书笔记 C#委托的BeginInvoke、EndInvoke之浅析

    c#中有一种类型叫委托,它是一种引用类型.可以引用静态与非静态的方法,且这些方法的参数列表和返回值类型必须与所声明的委托一致. 委托引用的方法可以通过BeginInvoke和EndInvoke来异步进 ...

  7. c#线程之异步委托begininvoke、invoke、AsyncWaitHandle.WaitOne 、异步回调

    单靠自己看书学总是会走很多弯路,任何人也不列外,有些时候自己遇到的很多问题,其它别人在很久之前也可能遇到过,上网查查可以走很大捷径,对自己的学习有很大帮助,刚开始弄线程这块,一开始只是看书,很多东西都 ...

  8. c#委托中的同步和异步方法即BeginInvoke和EndInvoke

    学习多线程之前我们先了解一下电脑的一些概念,比如进程,线程,这个参考https://www.cnblogs.com/loverwangshan/p/10409755.html 这篇文章.今天我们接着来 ...

  9. 通过委托来实现异步 Delegate的BeginInvoke和EndInvoke

    什么是.net的异步机制呢? 解释这个话题之前,先让我们来看看同步执行的程序 https://github.com/chucklu/Test/blob/master/DotNet4.5开发指南/并行处 ...

随机推荐

  1. linux find 命令

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  2. "context:annotation-config" and "context:component-scan"

    1.<context:annotation-config/>注册多个处理器 <context:annotation-config/>作用是向 Spring 容器注册 Autow ...

  3. sqlserver 索引的结构及其存储,索引内容

    sqlserver 索引的结构及其存储,sql server索引内容 文章转载,原文地址: http://www.cnblogs.com/panchunting/p/SQLServer_IndexSt ...

  4. dedecms批量导出新增文章url和标题

    百度站长工具推出主动提交功能有一段时间了,可以将新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录.那么dedecms如何批量导出新增文章url呢?你可以用标签调用最新文章,可以用sq ...

  5. 显示界面的流畅性FHHFPSIndicator

    github地址https://github.com/jvjishou/FHHFPSIndicator 1.使用cocoapods  pod 'FHHFPSIndicator' 使用方法: 然后在Ap ...

  6. 后缀名htm与html的区别

    前者是超文本标记(Hypertext Markup) 后者是超文本标记语言(Hypertext Markup Language) 可以说 htm = html 同时,这两种都是静态网页文件的扩展名,扩 ...

  7. unity3d-编辑器结构

    1.Porject视图 Project视图主要存放游戏中用到的所有资源文件,常见的资源包括: 游戏脚本.预设.材质.动画.自定义字体.纹理.物理材质和GUI皮肤.这些资源需要 赋予Hierarchy视 ...

  8. 移动端1px细线解决方案总结

    现在的PM和UI总以看app的眼光看html5, html页面要做的专业美观,而且必须很精细. 去年的时候UI就告诉我h5上的边框线太粗,把整站都给拉low了. 当时工期紧就没太在意1px粗细, 好在 ...

  9. 开发人员必备的几款bug管理工具

    Bug是软件开发过程中的“副产品”,也是开发人员最不想见到的状况.如果没有跟踪和梳理各种bug和问题并及时解决,项目就会花费非常多的时间,导致整个项目的重心偏移.如果在产品开发过程中,使用一个合适的B ...

  10. 实现kylin定时跑当天的任务

    说明: 每天自动构建cube,动态在superset里面查看每天曲线变化图 #! /bin/bash ##cubeName cube的名称 ##endTime 执行build cube的结束时间 (命 ...