举例说明一个 委托异步调用的例子,要用到线程,希望大家告诉下我,谢谢。 

解决方案 »

  1.   

    using   System;     
        
      namespace   nsEventSample     
      {     
              ///   <summary>     
              ///   类EatEventArgs   必须继承自类EventArgs,用来引发事件时封装数据     
              ///   </summary>     
              public   class   EatEventArgs   :   EventArgs     
              {     
                      public   String   restrauntName;           //饭店名称     
                      public   decimal   moneyOut;                         //准备消费金额     
              }     
        
              ///   <summary>     
              ///   这个委托用来说明处理吃饭事件的方法的方法头(模式)     
              ///   </summary>     
              public   delegate   void   EatEventHandler(object   sender,   EatEventArgs   e);     
        
              ///   <summary>     
              ///   引发吃饭事件(EateEvent)的类Master(主人),这个类必须     
              ///   1.声明一个名为EatEvent的事件:   public   event   EatEventHandler   EatEvent;     
              ///   2.通过一个名为OnEatEvent的方法来引发吃饭事件,给那些处理此事件的方法传数据;     
              ///   3.说明在某种情形下引发事件呢?在饿的时候。用方法Hungrg来模拟。     
              ///   </summary>     
              public   class   Master     
              {     
                      //声明事件     
                      public   event   EatEventHandler   EatEvent;     
        
                      //引发事件的方法     
                      public   void   OnEatEvent(EatEventArgs   e)     
                      {     
                              if   (EatEvent   !=   null)     
                              {     
                                      EatEvent(this,   e);     
                              }     
                      }     
        
                      //当主人饿的时候,他会指定吃饭地点和消费金额。     
                      public   void   Hungry(String     restrauntName,   decimal   moneyOut)     
                      {     
                              EatEventArgs   e   =   new   EatEventArgs();     
                              e.restrauntName   =   restrauntName;     
                              e.moneyOut   =   moneyOut;     
        
                              Console.WriteLine("主人说:");     
                              Console.WriteLine("我饿了,要去{0}吃饭,消费{1}元",   e.restrauntName,   e.moneyOut);     
        
                              //引发事件     
                              OnEatEvent(e);     
                      }     
              }     
        
              ///   <summary>     
              ///   类Servant(仆人)有一个方法ArrangeFood(安排食物)来处理主人的吃饭事件     
              ///   </summary>     
              public   class   Servant     
              {     
                      public   void   ArrangeFood(object   sender,   EatEventArgs   e)     
                      {     
                              Console.WriteLine();     
                              Console.WriteLine("仆人说:");     
                              Console.WriteLine("我的主人,   您的命令是   :   ");     
                              Console.WriteLine("吃饭地点   --   {0}",   e.restrauntName);     
                              Console.WriteLine("准备消费   --   {0}元   ",   e.moneyOut);     
                              Console.WriteLine("好的,正给您安排。。");     
                              Console.WriteLine("主人,您的食物在这儿,请慢用");     
                      }     
              }     
        
              ///   <summary>     
              ///   类God安排qinshihuang(秦始皇)的仆人是lisi(李斯),并让李斯的ArrangeFood     
              ///   方法来处理qinshihuang的吃饭事件:qinshihuang.EatEvent   +=   new   EatEventHandler(lishi.ArrangeFood);     
              ///   </summary>     
              public   class   God     
              {     
                      public   static   void   Main()     
                      {     
                              Master     qinshihuang   =   new   Master();     
                              Servant   lishi   =   new   Servant();     
        
                              qinshihuang.EatEvent   +=   new   EatEventHandler(lishi.ArrangeFood);  //订阅事件   
                                  
                              //秦始皇饿了,想去希尔顿大酒店,消费5000元     
                              qinshihuang.Hungry("希尔顿大酒店",   5000.0m);     //在hungry中触发该事件
                      }     
              }     
      }    
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kaizi_sun/archive/2009/10/11/4653095.aspx
      

  2.   

    不太理解你的意思,就当做是要自建线程吧。其实这种问题最好是找MSDN。
    关于窗口程序的多线程,看看MSDN上的代码就可,再告诉你一个技巧:
    1、由于自建线程是无法访问窗口线程的非静态资源的,所以一般可以用静态变量来传递参数。
    2、另外如果要将自建线程中的事件传递到窗口的话可以用Control.Invoke()这个函数,这是可以跨线程调用的,可以安全实现将自建线程中的事件传递到窗口中。
    若不能解决你的问题的话,还是找MSDN吧
      

  3.   

    不知道问些什么,自己找本书看看吧.这么问是不是想让别人把这个章节帮你弄上来,那样的话,你还不如MSDN或是到网络上搜索.