委托的begininvoke
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的更多相关文章
- C# 对委托的BeginInvoke,EndInvoke 及Control 的BeginInvoke,EndInvoke 的理解
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 委托的BeginInvoke和EndInvoke方法
.NET Framework 允许异步调用任何方法,为了实现异步调用目标,需要定义与被调用方法具有相同签名的委托.公共语言运行时会自动使用适当的签名为该委托定义 BeginInvoke 和 EndIn ...
- 异步使用委托delegate --- BeginInvoke和EndInvoke方法
当我们定义一个委托的时候,一般语言运行时会自动帮委托定义BeginInvoke 和 EndInvoke两个方法,这两个方法的作用是可以异步调用委托. 方法BeginInvoke有两个参数: Async ...
- 转:C# 对委托的BeginInvoke,EndInvoke 及Control 的BeginInvoke,EndInvoke 的理解
转载自:http://www.cnblogs.com/easyfrog/p/3141269.html using System; using System.Collections.Generic; u ...
- 使用委托的BeginInvoke方法来完成复杂任务的操作
现在假设我有这样一个窗体(包含一个进度条和一个按钮与两个文本框),在第一个文本框中输入一个数字进行阶乘运算,在此过程中进度条与运算进度保持一致,同时可以在第二个文本框中进行其它工作(比如输入).对付这 ...
- 读书笔记 C#委托的BeginInvoke、EndInvoke之浅析
c#中有一种类型叫委托,它是一种引用类型.可以引用静态与非静态的方法,且这些方法的参数列表和返回值类型必须与所声明的委托一致. 委托引用的方法可以通过BeginInvoke和EndInvoke来异步进 ...
- c#线程之异步委托begininvoke、invoke、AsyncWaitHandle.WaitOne 、异步回调
单靠自己看书学总是会走很多弯路,任何人也不列外,有些时候自己遇到的很多问题,其它别人在很久之前也可能遇到过,上网查查可以走很大捷径,对自己的学习有很大帮助,刚开始弄线程这块,一开始只是看书,很多东西都 ...
- c#委托中的同步和异步方法即BeginInvoke和EndInvoke
学习多线程之前我们先了解一下电脑的一些概念,比如进程,线程,这个参考https://www.cnblogs.com/loverwangshan/p/10409755.html 这篇文章.今天我们接着来 ...
- 通过委托来实现异步 Delegate的BeginInvoke和EndInvoke
什么是.net的异步机制呢? 解释这个话题之前,先让我们来看看同步执行的程序 https://github.com/chucklu/Test/blob/master/DotNet4.5开发指南/并行处 ...
随机推荐
- IDEA的快捷键和相关设置
快捷键 Shift + Shift: 查找一切 Alt + /: 代码提示(需要修改) Ctrl + Alt + F12: 打开文件所在磁盘位置 Alt + F12: 打开终端 Alt + Ins ...
- 【Python】web.py初识学习
简单而直接的Python web 框架:web.py 2016年11月03日 14:09:08 擒贼先擒王 阅读数:35157更多 个人分类: Web From:https://www.oschi ...
- redhat7下对用户账户的管理
redhat7对用户帐号的管理主要集中在新建,删除和修改三个动作. 1.新建用户 通过useradd --help,我们得到useradd的详细参数. -d 目录 指定用户主目录,如果此目录不存在,则 ...
- Selenium之WebdriverApi详解
获取标签元素 # 通过ID定位目标元素 driver.find_element_by_id('#i1') # 通过classname定位目标元素 driver.find_element_by_clas ...
- angular.element 动态添加和删除元素
addClass()-为每个匹配的元素添加指定的样式类名after()-在匹配元素集合中的每个元素后面插入参数所指定的内容,作为其兄弟节点append()-在每个匹配元素里面的末尾处插入参数内容att ...
- mui笔记
1.关闭当前页面执行上一个页面的方法 var preview = plus.webview.currentWebview().opener() //获取当前窗口的创建者,即A preview.eval ...
- C语言typeof详解
前言: typeof关键字是C语言中的一个新扩展,这个特性在linux内核中应用非常广泛. 一,说明 typeof的参数可以是两种形式:表达式或类型. 1,表达式的的例子: ...
- 用python实现一个简单的socket网络聊天通讯 (Linux --py2.7平台与windows--py3.6平台)
windows --> windows 写法均在py3.6 客户端写法 import socket client = socket.socket() client.connect(('192 ...
- VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)
上一节中鸡啄米讲了GDI对象之画刷CBrush,至此图形图像的入门知识就讲完了.从本节开始鸡啄米将为大家带来Ribbon界面开发的有关内容.本文先来说说如何创建Ribbon样式的应用程序框架. Rib ...
- 支持向量机(SVM)中的 SMO算法
1. 前言 最近又重新复习了一遍支持向量机(SVM).其实个人感觉SVM整体可以分成三个部分: 1. SVM理论本身:包括最大间隔超平面(Maximum Margin Classifier),拉格朗日 ...