程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#基礎學習 —— 異步編程篇 (一)(4)

C#基礎學習 —— 異步編程篇 (一)(4)

編輯:關於C語言

不中斷的輪循,每次循環輸出一個 "."

class AsyncTest
  {
    static void Main(string[] args)
    {
      AsyncDemo demo = new AsyncDemo("jiangnii");
      // Execute begin method
      IAsyncResult ar = demo.BeginRun(null, null);
      Console.Write("Waiting..");
      while (!ar.IsCompleted)
      {
        Console.Write(".");
        // You can do other things here
      }
      Console.WriteLine();
      // Still need use end method to get result, but this time it will return immediately
      string demoName = demo.EndRun(ar);
      Console.WriteLine(demoName);
    }
  }

最後是使用回調方法並加上狀態對象,狀態對象被作為 IAsyncResult 參數的AsyncState 屬性被傳給回調方法。回調方法執行前不能讓主線程退出,我這裡只是簡單的讓其休眠了1秒。另一個與之前不同的地方是 AsyncDemo對象被定義成了類的靜態字段,以便回調方法使用

class AsyncTest
  {
    static AsyncDemo demo = new AsyncDemo("jiangnii");
    static void Main(string[] args)
    {
      // State object
      bool state = false;
      // Execute begin method
      IAsyncResult ar = demo.BeginRun(new AsyncCallback(outPut), state);
      // You can do other thins here
      // Wait until callback finished
      System.Threading.Thread.Sleep(1000);
    }
    // Callback method
    static void outPut(IAsyncResult ar)
    {
      bool state = (bool)ar.AsyncState;
      string demoName = demo.EndRun(ar);
      if (state)
      {
        Console.WriteLine(demoName);
      }
      else
      {
        Console.WriteLine(demoName + ", isn't it?");
      }
    }
  }

其他

對於一個已經實現了 BeginOperationName 和 EndOperationName 方法的對象,我們可以直接用上述方式調用,但對於只有同步方法的對象,我們要對其進行異步調用也不需要增加對應的異步方法,而只需定義一個委托並使用其 BeginInvoke 和 EndInvoke 方法就可以了

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