用回調(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-10-11 09:28 sanmao 閱讀(283) 評(píng)論(0)  編輯  收藏

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


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

          常用鏈接

          留言簿(5)

          隨筆分類(lèi)

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 沿河| 洪湖市| 普兰店市| 水富县| 长阳| 夏津县| 安塞县| 北流市| 清徐县| 高青县| 无棣县| 八宿县| 阿勒泰市| 大庆市| 镶黄旗| 江永县| 年辖:市辖区| 新津县| 乌苏市| 武功县| 石渠县| 宁明县| 孟津县| 卓资县| 宜兰县| 普定县| 商丘市| 锡林浩特市| 岳西县| 永德县| 建湖县| 邛崃市| 鸡东县| 丰顺县| 大埔区| 合肥市| 郑州市| 镇雄县| 黔西| 永昌县| 乌审旗|