博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#异步调用
阅读量:5876 次
发布时间:2019-06-19

本文共 1259 字,大约阅读时间需要 4 分钟。

在有时候,我们要从一些外设备或是网络索取大量数据时,外设备可能须要处理非常久才干把传输数据回计算机,这时我们仅仅有傻傻的等待。

但我们採用异步方法就不同了,我们能够利用这点时间去做别的事,等待完毕后,再通知我们接收。

 

1.怎样进行异步调用

(1)定义要运行异步的方法。

(2)定义一个与运行异步方法同样签名的托付。

(3)实例化该托付,该托付应该指向该异步方法。

(4)利用BeginInvoke启动异步方法。

(5)利用EndInvoke得到结果。

(6)设置回调方法。(非必需)

 

2.BeginInvoke和EndInvoke方法的使用:

我们都知道当程序定义一个托付时,公共语言执行库将自己主动为该托付定义具有签名的BegInvoke和EndInvoke 方法

(1)BeginInvoke

    BeginInvoke 方法用于启动异步调用。它与你须要异步运行的方法具有同样的參数,另外还有两个额外的參数。

    BeginInvoke 表示马上返回,不等待异步调用的完毕。

    BeginInvoke 返回一个IAsyncResult,可用于监视异步进度。

(2)EndInvoke

    EndInvoke 方法用于检索异步调用结果。调用BeginInvoke后可随时调用EndInvoke方法;假设异步调用未完毕,EndInvoke 将一直堵塞。

异步调用完毕。EndInvoke的參数包含您须要异步运行的方法的out和ref參数(在 Visual Basic 中为 <Out> ByRef 和 ByRef)以及由BeginInvoke 返回的IAsyncResult。

3.演示样例:

namespace ConsoleApplication

{
    //定义代理
    delegate String Mydelegate();
    class temp
    {
        static void Main(String[] args)
        {
            //实例化代理
            Mydelegate Md = new Mydelegate(AsyncMethod);
            //实例一个回调代理
            AsyncCallback callback = new AsyncCallback(callbackMethod);
            //開始运行异步方法
            Md.BeginInvoke(callback, Md);
            Console.ReadLine();
        }
        //异步调用的方法
        static String AsyncMethod()
        {
            Console.WriteLine("异步方法正运行");
            String str = "异步调用已结束";
            return str;
        }

        //回调方法

        static void callbackMethod(IAsyncResult Ias)
        {
            Mydelegate Md = (Mydelegate)Ias.AsyncState;
            String  str = Md.EndInvoke(Ias);
            Console.WriteLine(str);
        }
    }
}

转载地址:http://ojzix.baihongyu.com/

你可能感兴趣的文章
每天一个linux命令(52):scp命令
查看>>
CMOS Sensor Interface(CSI)
查看>>
linq中的contains条件
查看>>
HDU 5590 ZYB's Biology 水题
查看>>
memcached 分布式聚类算法
查看>>
言未及之而言,谓之躁;言及之而不言,谓之隐;未见颜色而言,谓之瞽(gǔ)...
查看>>
MYSQL查询一周内的数据(最近7天的)
查看>>
Redis的缓存策略和主键失效机制
查看>>
禁止body滚动允许div滚动防微信露底
查看>>
Xtreme8.0 - Kabloom dp
查看>>
jquery css3问卷答题卡翻页动画效果
查看>>
MDK5.00中*** error 65: access violation at 0xFFFFFFFC : no 'write' permission的一种解决方法
查看>>
Android 集成支付宝支付详解
查看>>
SQL分布式查询、跨数据库查询
查看>>
C#------连接SQLServer和MySQL字符串
查看>>
Arcgis Licensemanager 不能启动的原因之一(转载)
查看>>
(原)Android在子线程用handler发送的消息,主线程是怎么loop到的?
查看>>
$digest already in progress 解决办法——续
查看>>
虚拟机 centos设置代理上网
查看>>
Struts2中Date日期转换的问题
查看>>