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#法式設計有所贊助。