用回調(diào)方法檢索數(shù)據(jù)
          下面的示例演示了一個(gè)從線(xiàn)程中檢索數(shù)據(jù)的回調(diào)方法。包含數(shù)據(jù)和線(xiàn)程方法的類(lèi)的構(gòu)造函數(shù)也接受代表回調(diào)方法的委托;
          在線(xiàn)程方法結(jié)束前,它調(diào)用該回調(diào)委托。
          */
          using System;
          using System.Threading;

          //被實(shí)例化的類(lèi),用于傳遞參數(shù)進(jìn)行操作
          public class ThreadWithState 
          {
              
          private string boilerplate;
              
          private int value;
              
          //定義一個(gè)回調(diào)函數(shù)
              private ExampleCallback callback;

              
          //接收線(xiàn)程傳遞的參數(shù)
              public ThreadWithState(string text, int number, ExampleCallback callbackDelegate) 
              
          {
                  boilerplate 
          = text;
                  value 
          = number;
                  callback 
          = callbackDelegate;
              }


              
          public void ThreadProc() 
              
          {
                  Console.WriteLine(boilerplate, value);
                  
          //判斷是否執(zhí)行回調(diào)函數(shù)、并把參數(shù)傳遞給回調(diào)函數(shù)
                  if (callback != null)
                      callback(
          1);
              }

          }


          //聲明一個(gè)回調(diào)函數(shù):注意傳遞的參數(shù)要與Example類(lèi)中的函數(shù)參數(shù)類(lèi)型一致
          public delegate void ExampleCallback(int lineCount);

          //事例主類(lèi)
          public class Example 
          {
              
          public static void Main() 
              
          {
                  
          //實(shí)例化ThreadWithState,并傳遞參數(shù),注意:new ExampleCallback(ResultCallback)的命名空間引用,及其傳遞的參數(shù)(ResultCallback函數(shù))
                  ThreadWithState tws = new ThreadWithState("This number {0}."42new ExampleCallback(ResultCallback));

                  Thread t 
          = new Thread(new ThreadStart(tws.ThreadProc));
                  t.Start();
                  Console.WriteLine(
          "線(xiàn)程開(kāi)始執(zhí)行");
                  
          //此為判斷線(xiàn)程是否執(zhí)行結(jié)束,但不建議阻塞線(xiàn)程,這樣線(xiàn)程就會(huì)等待完成后再進(jìn)行其他操作
                  
          //可利用:t.IsAlive是否處于執(zhí)行狀態(tài)來(lái)判斷線(xiàn)程
                  t.Join();
                  Console.WriteLine(
          "線(xiàn)程執(zhí)行結(jié)束");  
              }


              
          //回調(diào)處理函數(shù),應(yīng)與ExampleCallback的參數(shù)類(lèi)型應(yīng)一致
              public static void ResultCallback(int lineCount) 
              
          {
                  Console.WriteLine(
          "printed {0} lines.", lineCount);  
              }

          }



          /*向線(xiàn)程傳遞數(shù)據(jù)
          ThreadStart 委托既沒(méi)有參數(shù)也沒(méi)有返回值。這意味著不可以使用需要參數(shù)的方法啟動(dòng)線(xiàn)程,或從方法中獲得返回值。 

          為向線(xiàn)程傳遞數(shù)據(jù),需要?jiǎng)?chuàng)建一個(gè)用來(lái)保持?jǐn)?shù)據(jù)和線(xiàn)程方法的對(duì)象,如下面的兩個(gè)代碼示例所示。 
          為檢索線(xiàn)程方法的結(jié)果,您可以使用回調(diào)方法,如第二個(gè)代碼示例中所示。 
          */

          using System;
          using System.Threading;

          //被實(shí)例化的類(lèi),用于傳遞參數(shù)進(jìn)行操作
          public class ThreadWithState 
          {
              
          private string boilerplate;
              
          private int value;

              
          public ThreadWithState(string text, int number) 
              
          {
                  boilerplate 
          = text;
                  value 
          = number;
              }

                     
              
          public void ThreadProc() 
              
          {
                  Console.WriteLine(boilerplate, value); 
              }

          }


          //創(chuàng)建線(xiàn)程調(diào)用ThreadWithState
          public class Example 
          {
              
          public static void Main() 
              
          {
                  
          //實(shí)例化類(lèi)ThreadWithState,利用構(gòu)造函數(shù)向線(xiàn)程傳遞參數(shù)
                  ThreadWithState tws = new ThreadWithState("This number {0}."42);
                  
          //創(chuàng)建線(xiàn)程并執(zhí)行ThreadWithState類(lèi)中的ThreadProc函數(shù)
                  Thread t = new Thread(new ThreadStart(tws.ThreadProc));
                  t.Start();
                  Console.WriteLine(
          "線(xiàn)程開(kāi)始執(zhí)行");
                  
          //此為判斷線(xiàn)程是否執(zhí)行結(jié)束,但不建議阻塞線(xiàn)程,這樣線(xiàn)程就會(huì)等待完成后再進(jìn)行其他操作
                  
          //可利用:t.IsAlive是否處于執(zhí)行狀態(tài)來(lái)判斷線(xiàn)程
                  t.Join();
                  Console.WriteLine(
          "線(xiàn)程執(zhí)行結(jié)束");  
              }

          }

          文章來(lái)源:http://www.cnblogs.com/wangdetian168/archive/2008/12/21/1359255.html
          posted on 2010-09-28 10:54 sanmao 閱讀(74) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          常用鏈接

          留言簿(5)

          隨筆分類(lèi)

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 尼木县| 泊头市| 获嘉县| 曲靖市| 新乡市| 清苑县| 平罗县| 大冶市| 金山区| 浦县| 辉南县| 福清市| 巫溪县| 拜泉县| 和田县| 娱乐| 丰宁| 五寨县| 三门县| 乐安县| 南澳县| 高州市| 调兵山市| 芜湖市| 金秀| 买车| 思南县| 如东县| 同心县| 屏边| 囊谦县| 梅州市| 佛教| 邹平县| 香河县| 济源市| 宁远县| 迁西县| 宁陵县| 平江县| 康定县|