国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#異步調用示例詳解

2019-10-29 21:09:54
字體:
來源:轉載
供稿:網友

本文實例為大家分享了C#異步調用的具體代碼,供大家參考,具體內容如下

 

using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;using System.Threading.Tasks;namespace AsyncAppTest{  ////異步調用示例詳解    /// 第1步:定義委托;此委托的返回值、參數類型必須與要調用的異步方法一致;  ///  public delegate Task<string> AsyncSendMail(string rece, string copyer, string subj, string body);    class DelegateTest  {    //定義委托變量    AsyncSendMail sendMail = null;         //異步方法的回調方法    //回調方法必須要有類型為 IAsyncResult的參數,    //以獲取開始異步 BeginInvoke的調用結果    void BackCall(IAsyncResult parameter)    {       //parameter.IsCompleted用于判斷異步方法是否已調用完成;      if(parameter.IsCompleted)      {          //通過EndInvoke方法獲取異步方法的返回結果(類型與異步方法的結果一致)              Task<string> message = sendMail.EndInvoke(parameter);        Console.Write(string.Format("回調完成,返回值:{0}", message.Result));      }      else      {        Console.Write("調用未完成");      }    }    public string AsyncSendMailHandler( string rece, string copyer, string sub, string body)    {       //WcfTest.MailServiceClient 是服務器上的Wcf服務,是本示例內要調用的異步方法      WcfTest.MailServiceClient sc = new WcfTest.MailServiceClient();            //將異步方法與委托關聯      sendMail = new AsyncSendMail(sc.SendEmailAsync);       string s = null;      //以下BeginInvoke方法在調用時,先將 SendEmailAsync的參數傳入,BackCall是回調方法,s在此處的作用未弄明白,      //但參數中不可省略      // 異步是相對于委托實例所在線程的,本示例中是指sendMail與sc.MailServiceClient不是一個線程;      sendMail.BeginInvoke(rece, copyer, sub, body, BackCall, s);            return s;    }    }      class Program  {        static void Main(string[] args)    {            DelegateTest test = new DelegateTest();      test.EventCompleteHandle("gqpeng@cmhit.com", null, "測試郵件", "測試郵件");      Console.Write("上面是異步開始調用");      Console.Read();     }  } }

另:以下是Invoke與BeginInvoke的區別。

Control.Invoke 方法 (Delegate) :在擁有此控件的基礎窗口句柄的線程上執行指定的委托。

Control.BeginInvoke 方法 (Delegate) :在創建控件的基礎句柄所在線程上異步執行指定委托。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定南县| 手游| 常山县| 绵阳市| 牟定县| 离岛区| 肇源县| 阿拉善盟| 扶绥县| 文山县| 绥德县| 江川县| 石景山区| 明星| 吉林省| 安泽县| 普宁市| 舒兰市| 托里县| 丰县| 册亨县| 柞水县| 巍山| 遵化市| 通道| 惠水县| 兰考县| 太康县| 罗甸县| 新津县| 华坪县| 林口县| 璧山县| 德安县| 开化县| 马龙县| 吴江市| 司法| 禹城市| 神木县| 黄平县|