欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#異步調(diào)用示例詳解

 更新時間:2017年06月08日 09:42:12   作者:千年海巖  
這篇文章主要為大家詳細介紹了C#異步調(diào)用的示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C#異步調(diào)用的具體代碼,供大家參考,具體內(nèi)容如下

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading.Tasks;

namespace AsyncAppTest
{
  ////異步調(diào)用示例詳解  
  /// 第1步:定義委托;此委托的返回值、參數(shù)類型必須與要調(diào)用的異步方法一致;
  ///
  public delegate Task<string> AsyncSendMail(string rece, string copyer, string subj, string body);
  
  class DelegateTest
  {
    //定義委托變量
    AsyncSendMail sendMail = null; 
    
    //異步方法的回調(diào)方法
    //回調(diào)方法必須要有類型為 IAsyncResult的參數(shù),
    //以獲取開始異步 BeginInvoke的調(diào)用結果
    void BackCall(IAsyncResult parameter)
    { 
      //parameter.IsCompleted用于判斷異步方法是否已調(diào)用完成;
      if(parameter.IsCompleted)
      {  
        //通過EndInvoke方法獲取異步方法的返回結果(類型與異步方法的結果一致)      
        Task<string> message = sendMail.EndInvoke(parameter);
        Console.Write(string.Format("回調(diào)完成,返回值:{0}", message.Result));
      }
      else
      {
        Console.Write("調(diào)用未完成");
      }
    }

    public string AsyncSendMailHandler( string rece, string copyer, string sub, string body)
    { 
      //WcfTest.MailServiceClient 是服務器上的Wcf服務,是本示例內(nèi)要調(diào)用的異步方法
      WcfTest.MailServiceClient sc = new WcfTest.MailServiceClient();
      
      //將異步方法與委托關聯(lián)
      sendMail = new AsyncSendMail(sc.SendEmailAsync); 
      string s = null;
      //以下BeginInvoke方法在調(diào)用時,先將 SendEmailAsync的參數(shù)傳入,BackCall是回調(diào)方法,s在此處的作用未弄明白,
      //但參數(shù)中不可省略
      // 異步是相對于委托實例所在線程的,本示例中是指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("上面是異步開始調(diào)用");
      Console.Read(); 
    }
  } 
}

另:以下是Invoke與BeginInvoke的區(qū)別。

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

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C# 設計模式系列教程-狀態(tài)模式

    C# 設計模式系列教程-狀態(tài)模式

    狀態(tài)模式主要解決的是當控制一個對象狀態(tài)轉換的條件表達式過于復雜時的情況。把狀態(tài)的判斷邏輯轉移到表示不同的一系列類當中,可以把復雜的邏輯判斷簡單化。
    2016-06-06
  • C#加密app.config中連接字符串的方法

    C#加密app.config中連接字符串的方法

    這篇文章主要介紹了C#加密app.config中連接字符串的方法,涉及C#配置文件加密的相關實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Winform消除button按下出現(xiàn)的虛線簡單實現(xiàn)方法

    Winform消除button按下出現(xiàn)的虛線簡單實現(xiàn)方法

    這篇文章主要介紹了Winform消除button按下出現(xiàn)的虛線簡單實現(xiàn)方法,通過重寫button設置Selectable參數(shù)實現(xiàn)該功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#操作SQLite實現(xiàn)數(shù)據(jù)的增刪改查

    C#操作SQLite實現(xiàn)數(shù)據(jù)的增刪改查

    SQLite是一個輕量級、跨平臺的關系型數(shù)據(jù)庫,在小型項目中,方便,易用,同時支持多種開發(fā)語言。本文將用C#語言對SQLite 的一個封裝,實現(xiàn)數(shù)據(jù)的增刪改查。需要的可以參考一下
    2022-01-01
  • C#實現(xiàn)子窗體與父窗體通信方法實例總結

    C#實現(xiàn)子窗體與父窗體通信方法實例總結

    這篇文章主要介紹了C#實現(xiàn)子窗體與父窗體通信方法,實例總結了常用的四種窗體通信方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • C#判斷系統(tǒng)是32位還是64位的方法

    C#判斷系統(tǒng)是32位還是64位的方法

    這篇文章主要介紹了C#判斷系統(tǒng)是32位還是64位的方法,實例分析了兩種常用的技巧供大家選擇使用,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#串口通信實現(xiàn)方法

    C#串口通信實現(xiàn)方法

    這篇文章主要介紹了C#串口通信實現(xiàn)方法,詳細講述了C#串口通信所涉及的數(shù)據(jù)接收與發(fā)送方法,以及相關的線程調(diào)用方法,是非常典型的應用,需要的朋友可以參考下
    2014-12-12
  • C#實現(xiàn)將類的內(nèi)容寫成JSON格式字符串的方法

    C#實現(xiàn)將類的內(nèi)容寫成JSON格式字符串的方法

    這篇文章主要介紹了C#實現(xiàn)將類的內(nèi)容寫成JSON格式字符串的方法,涉及C#針對json格式數(shù)據(jù)轉換的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#中使用1.7版本驅動操作MongoDB簡單例子

    C#中使用1.7版本驅動操作MongoDB簡單例子

    這篇文章主要介紹了C#中使用1.7版本驅動操作MongoDB簡單例子,本文給出了連接MongoDB、操作MongoDB數(shù)據(jù)等例子,需要的朋友可以參考下
    2015-01-01
  • C#與PLC通訊的實現(xiàn)代碼

    C#與PLC通訊的實現(xiàn)代碼

    這篇文章主要介紹了C#與PLC通訊的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04

最新評論