• C#异步调用


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

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

    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);
            }
        }
    }

  • 相关阅读:
    Echarts markPoint 动态数据添加,选择性查询
    echarts timeline点击以后 蓝色的checkpoint位置不跟当前点击的节点重合
    Echarts 动态添加到map显示
    tomcat 下不在tomcat发布项目,引用外部链接
    SQL Server 2008安装
    eclipce 安装 svn插件(百度知道)
    迅为IMX6ULL开发板Linux蜂鸣器实验
    4412开发板-Android4.4典型功能相关源码修改及定制
    IMX6ULL开发平台Linux-LED实验
    迅为iTOP4418开发板运行Android7.1/Qt5.7/Ubuntu12.04系统源码开源
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3826196.html
Copyright © 2020-2023  润新知