委托的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开发指南/并行处 ...
随机推荐
- KVM VHOST中irqfd的使用
2018-01-18 其实在之前的文章中已经简要介绍了VHOST中通过irqfd通知guest,但是并没有对irqfd的具体工作机制做深入分析,本节简要对irqfd的工作机制分析下.这里暂且不讨论具体 ...
- JS闭包中的循环绑定处理程序
前几天工作中写前端js代码时,遇到了遍历元素给它添加单击事件.就是这个问题让我整整调了一个下午.最后还是下班回家,上网查资料才知道怎么解决的. (PS:之前也在<jQuery基础教程>第四 ...
- 据库被标记为RESTORING的处理方式,正在还原中,正在恢复
关键词:正在还原,正在恢复,restoring,RECOVERING 转自:http://limindo.blog.163.com/blog/static/2647585620101161154121 ...
- 005-redis-命令-无序集合,有序集合
Redis 无序集合命令 下表列出了 Redis 集合基本命令: 序号 命令及描述 1 SADD key member1 [member2] 向集合添加一个或多个成员 2 SCARD key 获取集合 ...
- 简单mysql常用命令
在命令行 输入 mysql -uroot -p123456 (-u账号 -p密码)登入mysql服务器 1.设置mysql密码set password for 'root'@'localhost' = ...
- Kylin安装问题--/home/hadoop-2.5.1/contrib/capacity-scheduler/.jar (No such file or directory)
WARNING: Failed to process JAR [jar:file:/home/hadoop-2.5.1/contrib/capacity-scheduler/.jar!/] for T ...
- (转)Elasticsearch 的坑爹事——记录一次mapping field修改过程
Elasticsearch 的坑爹事 本文记录一次Elasticsearch mapping field修改过程 团队使用Elasticsearch做日志的分类检索分析服务,使用了类似如下的_mapp ...
- 【SVM】A Practical Guide to Support Vector Classication
零.简介 一般认为,SVM比神经网络要简单. 优化目标:
- jquery 的each函数
each函数经常用到.它本身就是一个循环遍历 你可以可以break continue 但这是在for while循环中 each中我们可以这样 下面的例子是遍历 MyTable中所有的tr 第一个td ...
- C#--virtual,abstract,override,new,sealed修饰符学习
1.参考博客 http://www.cnblogs.com/oneword/archive/2009/07/02/1515279.html http://www.cnblogs.com/mygood ...