c#_delegate_异步调用_BeginInvoke
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading; //异步调用
//IAsyncResult BeginInvoke(argument,AsyncCallback callback,object asynState)
//argument - 如果没有参数,callback就是第一个参数
//BeginInvoke返回值是IAsyncResult
//AsyncState - 传递给异步调用的那个状态对象
//AsyncWaitHandle - 在异步操作完成前,一直使用WaitHandle阻断调用线程
//CompleteSynchronously - 指示一步操作是否同步完成
//IsCompleted - 指示异步操作已经完成 namespace Starter
{
public delegate void DeleageteClass(); class Program
{
static void Main(string[] args)
{
DeleageteClass del = MethodA; DelegateStateBag state = new DelegateStateBag(); IAsyncResult ar = del.BeginInvoke(Callback,state); if (ar.IsCompleted == true)
{
Console.WriteLine("MethodA completed");
}
else
{
Console.WriteLine("MethodA not completed");
} ar.AsyncWaitHandle.WaitOne(); //do something else //Sleep - 不然会产生竞争,同时启动Callback和main,Sleep是消除竞争的根本办法
Thread.Sleep(100); lock (state)
{
Console.WriteLine("Back in main");
Console.WriteLine(state.message);
} Console.ReadLine();
} public static void Callback(IAsyncResult ar)
{
DelegateStateBag state = (DelegateStateBag)ar.AsyncState ;
lock(state)
{
Console.WriteLine("Call back running");
((DelegateStateBag)ar.AsyncState).message =
"State object modify in callack";
} } public static void MethodA()
{
Console.WriteLine("MethodA running....");
Thread.Sleep(200);
}
} class DelegateStateBag
{
public string message;
}
}
c#_delegate_异步调用_BeginInvoke的更多相关文章
- C#委托异步调用
参考页面: http://www.yuanjiaocheng.net/webapi/mvc-consume-webapi-get.html http://www.yuanjiaocheng.net/w ...
- Direct3D Draw函数 异步调用原理解析
概述 在D3D10中,一个基本的渲染流程可分为以下步骤: 清理帧缓存: 执行若干次的绘制: 通过Device API创建所需Buffer: 通过Map/Unmap填充数据到Buffer中: 将Buff ...
- 一个简单的webservice的demo(下)winform异步调用webservice
绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单 ...
- 浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法(转载)
在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们发现程序执行完后并没有获取到我们想要的值,这时很有可能是因为你用的是ajax的异步调用async:t ...
- tornado 异步调用系统命令和非阻塞线程池
项目中异步调用 ping 和 nmap 实现对目标 ip 和所在网关的探测 Subprocess.STREAM 不用担心进程返回数据过大造成的死锁, Subprocess.PIPE 会有这个问题. i ...
- .Net组件程序设计之异步调用
.Net组件程序设计之异步调用 说到异步调用,在脑海中首先想到就是BeginInvoke(),在一些常用对象中我们也会常常见到Invoke()和BeginInvoke(), 要想让自己的组件可以被客户 ...
- 谈谈RPC中的异步调用设计
RPC(远过程调用)在分布式系统中是很常用的基础通讯手段,核心思想是将不同进程之间的通讯抽象为函数调用,基本的过程是调用端通过将参数序列化到流中并发送给服务端,服务端从流中反序列化出参数并完成实际的处 ...
- (转)spring boot注解 --@EnableAsync 异步调用
原文:http://www.cnblogs.com/azhqiang/p/5609615.html EnableAsync注解的意思是可以异步执行,就是开启多线程的意思.可以标注在方法.类上. @Co ...
- C# 多线程详解 Part.02(UI 线程和子线程的互动、ProgressBar 的异步调用)
我们先来看一段运行时会抛出 InvalidOperationException 异常的代码段: private void btnThreadA_Click(object sender, ...
随机推荐
- Oracle查看LogMiner的详解
Oracle数据库查看日志的方法很多,我们可以根据SQL语句来实现,也可以通过日志查看工具LogMiner来实现,本文我们主要就介绍了这一过程,接下来就让我们一起来了解一下吧. 一.Or ...
- Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别?
一个帖子的整理: Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别如果你不带参数的实例化:Handler ...
- 研究一家公司 z
第一部分:确定一家公司的“质地”(描绘一家公司的总体印象) 1.1 天花板 天花板是指企业或行业的产品(或服务)趋于饱和.达到或接近供大于求的状态.在进行投资之前 ...
- HUST 1017 Exact cover dance links
学习:请看 www.cnblogs.com/jh818012/p/3252154.html 模板题,上代码 #include<cstdio> #include<cstring> ...
- 018如何建立自动化框架 how to bulid the framwork
本讲包括: 一. objective 二. How to bulid 三. Keyview of frawork (关键视图) 四. conclusion automation framwork:自动 ...
- IE兼容性问题解决方案4--form表单在IE下重复提交
遇到过一种情况,点击提交按钮的时候,在IE下重复提交,而在其他浏览器下正常. 原因:button按钮不设置type时,在IE下被浏览器默认解析为type="submit",用js提 ...
- 【译】 AWK教程指南 7AWK应用实例
本节将示范一个统计上班到达时间及迟到次数的程序. 这程序每日被执行时将读入两个数据文件: * 员工当日到班时间的数据文件 ( 如下列的 arr.dat ) * 存放员工当月迟到累计次数的文件 当程序执 ...
- php中的字符串和正则表达式
一.字符串类型的特点 1.PHP是弱类型语言,其他数据类型一般都可以直接应用于字符串函数操作. 1: <?php //输出345 //输出345 //先查找hello常量,若没找到,将hello ...
- 【转】shell中IFS用法
http://blog.itpub.net/27181165/viewspace-775820/ 一 IFS的介绍 Shell 脚本中有个变量叫IFS(Internal Field Seprato ...
- Petshop学习第一天
1.PetShop的体系架构: 2.分层设计的目的: 分散关注.松散耦合.逻辑复用.标准定义 3.一些不明白的地方: item和product是什么关系??? Model类库中的Linq To Sql ...