真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在C#項(xiàng)目中實(shí)現(xiàn)異步調(diào)用

今天就跟大家聊聊有關(guān)怎么在C#項(xiàng)目中實(shí)現(xiàn)異步調(diào)用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)公司提供高防服務(wù)器、云服務(wù)器、香港服務(wù)器、雅安移動(dòng)機(jī)房

具體內(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 AsyncSendMail(string rece, string copyer, string subj, string body);
  
  class DelegateTest
  {
    //定義委托變量
    AsyncSendMail sendMail = null; 
    
    //異步方法的回調(diào)方法
    //回調(diào)方法必須要有類型為 IAsyncResult的參數(shù),
    //以獲取開始異步 BeginInvoke的調(diào)用結(jié)果
    void BackCall(IAsyncResult parameter)
    { 
      //parameter.IsCompleted用于判斷異步方法是否已調(diào)用完成;
      if(parameter.IsCompleted)
      {  
        //通過EndInvoke方法獲取異步方法的返回結(jié)果(類型與異步方法的結(jié)果一致)      
        Task 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 是服務(wù)器上的Wcf服務(wù),是本示例內(nèi)要調(diào)用的異步方法
      WcfTest.MailServiceClient sc = new WcfTest.MailServiceClient();
      
      //將異步方法與委托關(guān)聯(lián)
      sendMail = new AsyncSendMail(sc.SendEmailAsync); 
      string s = null;
      //以下BeginInvoke方法在調(diào)用時(shí),先將 SendEmailAsync的參數(shù)傳入,BackCall是回調(diào)方法,s在此處的作用未弄明白,
      //但參數(shù)中不可省略
      // 異步是相對(duì)于委托實(shí)例所在線程的,本示例中是指sendMail與sc.MailServiceClient不是一個(gè)線程;
      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) :在擁有此控件的基礎(chǔ)窗口句柄的線程上執(zhí)行指定的委托。

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

看完上述內(nèi)容,你們對(duì)怎么在C#項(xiàng)目中實(shí)現(xiàn)異步調(diào)用有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


當(dāng)前名稱:怎么在C#項(xiàng)目中實(shí)現(xiàn)異步調(diào)用
文章出自:http://weahome.cn/article/pspgdo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部