委托的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开发指南/并行处 ...
随机推荐
- 实现一个2008serve的IIS的虚拟目录(通过网络路径(UNC)的形式,共享在另外一个2008服务器上
转载:http://www.cnblogs.com/top5/archive/2012/12/10/2812133.html 目的:实现一个2008serve的IIS的虚拟目录(通过网络路径(UNC) ...
- 获取图片的大小(宽高):BytesIO
获取图片的大小(宽高) from io import BytesIO,StringIO import requests from PIL import Image img_url = "ht ...
- Android中 Application的使用
Application全局唯一,如果需要放置全局的变量,需要用到Application,类似于OC中的单例类,获者OC中的AppDelegate 第一步:创建一个AppContext继承Applica ...
- MYSQL中的BlackHole引擎
MYSQL中的BlackHole引擎 http://blog.csdn.net/ylspirit/article/details/7234021 http://blog.chinaunix.net/u ...
- vue学习之webpack
本质上,Webpack是一个现代 JavaScript应用程序的静态模块打包器(module bundler).当 Webpack处理应用程序时,它会递归地构建一个依赖关系图(dependency g ...
- [django]模板template原理
django 中的render和render_to_response()和locals(): http://www.cnblogs.com/wangchaowei/p/6750512.html 什么是 ...
- 百度编辑器UEditor源码模式下过滤div/style等html标签
UEditor在html代码模式下,当输入带有<div style="">.<iframe>这类带有html标签的内容时,切换为编辑器模式后,会发现输入的内 ...
- PAT Counting Leaves[一般]
1004 Counting Leaves (30)(30 分) A family hierarchy is usually presented by a pedigree tree. Your job ...
- python中关于不执行if __name__ == '__main__':测试模块的解决
1.新建测试脚本文件: 2.编辑测试脚本 import unittest import requests import json import HTMLTestRunner ur1 = 'http:/ ...
- [LeetCode] 589. N-ary Tree Preorder Traversal_Easy
Given an n-ary tree, return the preorder traversal of its nodes' values. For example, given a 3-ary ...