zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    }

  • 相关阅读:
    Firemonkey 控件设定字型属性及颜色
    ListView 使用 LiveBindings 显示超过 200 条记录
    Firemonkey ListView 获取项目右方「>」(Accessory) 事件
    XE7 Update 1 选 iOS 8.1 SDK 发布 iPhone 3GS 实机测试
    Firemonkey Bitmap 设定像素颜色 Pixel
    Firemonkey 移动平台 Form 显示使用 ShowModal 范例
    XE7 提交 App(iOS 8)提示「does not contain the correct beta entitlement」问题修复
    XE7 Android 中使用 MessageDlg 范例
    导出 XE6 预设 Android Style (*.style) 档案
    修正 Memo 設定為 ReadOnly 後, 無法有複製的功能
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4083206.html
Copyright © 2011-2022 走看看