程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#異步驟用實例小結

C#異步驟用實例小結

編輯:C#入門知識

C#異步驟用實例小結。本站提示廣大學習愛好者:(C#異步驟用實例小結)文章只能為提供參考,不一定能成為您想要的結果。以下是C#異步驟用實例小結正文


本文實例講述了C#異步驟用的辦法。分享給年夜家供年夜家參考。詳細以下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace CW
{
 public partial class AsyncDemo : Form
 {
  public AsyncDemo()
  {
   InitializeComponent();
  }
  private void Delgate_Load(object sender, EventArgs e)
  {
  }
  /// <summary>
  /// 完成拜托的辦法
  /// </summary>
  /// <param name="iCallTime"></param>
  /// <param name="iExecThread"></param>
  /// <returns></returns>
  string LongRunningMethod(int iCallTime, out int iExecThread)
  {
   Thread.Sleep(iCallTime);
   iExecThread = AppDomain.GetCurrentThreadId();
   return "MyCallTime was " + iCallTime.ToString();
  }
  delegate string MethodDelegate(int iCallTime, out int iExecThread);
  #region 示例 1: 同步驟用辦法#region 示例 1: 同步驟用辦法
  /// <summary>
  /// 示例 1: 同步驟用辦法
  /// </summary>
  public void DemoSyncCall()
  {
   string s;
   int iExecThread;
   // Create an instance of a delegate that wraps LongRunningMethod.
   MethodDelegate dlgt = new MethodDelegate(this.LongRunningMethod);
   // Call LongRunningMethod using the delegate.
   s = dlgt(3000, out iExecThread);
   MessageBox.Show(string.Format ("The delegate call returned the string: {0}, and the thread ID {1}", s, iExecThread.ToString() ) );
  }
  #endregion
  #region 示例 2: 經由過程 EndInvoke() 挪用形式異步驟用辦法
  /// <summary>
  /// 示例 2: 經由過程 EndInvoke() 挪用形式異步驟用辦法  
  /// </summary>
  public void DemoEndInvoke()
  {
   MethodDelegate dlgt = new MethodDelegate(this.LongRunningMethod);
   string s;
   int iExecThread;
   // Initiate the asynchronous call.
   IAsyncResult ar = dlgt.BeginInvoke(5000, out iExecThread, null, null);
   // Do some useful work here. This would be work you want to have
   // run at the same time as the asynchronous call.
   // Retrieve the results of the asynchronous call.
   s = dlgt.EndInvoke(out iExecThread, ar);
   MessageBox.Show(string.Format ("The delegate call returned the string: {0}, and the number {1}", s, iExecThread.ToString() ) );
  }
  #endregion
  #region 示例 3: 異步驟用辦法並應用 A WaitHandle 來期待挪用完成
  /// <summary>
  /// 示例 3: 異步驟用辦法並應用 A WaitHandle 來期待挪用完成
  /// </summary>
  public void DemoWaitHandle()
  {
   string s;
   int iExecThread;
   MethodDelegate dlgt = new MethodDelegate(this.LongRunningMethod);
   // Initiate the asynchronous call.
   IAsyncResult ar = dlgt.BeginInvoke(3000, out iExecThread, null, null);
   // Do some useful work here. This would be work you want to have
   // run at the same time as the asynchronous call.
   // Wait for the WaitHandle to become signaled.
   ar.AsyncWaitHandle.WaitOne();
   // Get the results of the asynchronous call.
   s = dlgt.EndInvoke(out iExecThread, ar);
   MessageBox.Show(string.Format ("The delegate call returned the string: {0}, and the number {1}", s, iExecThread.ToString() ) );
  }
  #endregion
  #region 示例 4: 異步驟用辦法經由過程輪詢挪用形式
  /// <summary>
  /// 示例 4: 異步驟用辦法經由過程輪詢挪用形式
  /// </summary>
  public void DemoPolling()
  {
   MethodDelegate dlgt = new MethodDelegate(this.LongRunningMethod);
   string s;
   int iExecThread;
   // Initiate the asynchronous call.
   IAsyncResult ar = dlgt.BeginInvoke(3000, out iExecThread, null, null);
   // Poll IAsyncResult.IsCompleted
   while (ar.IsCompleted == false)
   {
    Thread.Sleep(10); // pretend to so some useful work
   }
   s = dlgt.EndInvoke(out iExecThread, ar);
   MessageBox.Show(string.Format ("The delegate call returned the string: {0}, and the number {1}", s, iExecThread.ToString() ) );
  }
  #endregion
  #region 示例 5: 異步辦法完成後履行回調
  /// <summary>
  /// 示例 5: 異步辦法完成後履行回調
  /// </summary>
  public void DemoCallback()
  {
   MethodDelegate dlgt = new MethodDelegate(this.LongRunningMethod);
   int iExecThread;
   // Create the callback delegate.
   AsyncCallback cb = new AsyncCallback(MyAsyncCallback);
   // Initiate the Asynchronous call passing in the callback delegate
   // and the delegate object used to initiate the call.
   IAsyncResult ar = dlgt.BeginInvoke(5000, out iExecThread, cb, dlgt);
  }
  public void MyAsyncCallback(IAsyncResult ar)
  {
   string s;
   int iExecThread;
   // Because you passed your original delegate in the asyncState parameter
   // of the Begin call, you can get it back here to complete the call.
   MethodDelegate dlgt = (MethodDelegate)ar.AsyncState;
   // Complete the call.
   s = dlgt.EndInvoke(out iExecThread, ar);
   MessageBox.Show(String.Format("The delegate call returned the string: {0}, and the number {1}", s, iExecThread.ToString()));
   //Console.WriteLine(string.Format ("The delegate call returned the string: "{0}", and the number {1}", s, iExecThread.ToString() ) );
  }
  #endregion
  private void button1_Click(object sender, EventArgs e)
  {
   //DemoSyncCall() ;
   //DemoEndInvoke();
   //DemoWaitHandle();
   //DemoPolling();
   DemoCallback();
  }
 }
}

願望本文所述對年夜家的C#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved