<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      事件

      一.事件概述

      事件具有以下特點:

      • 發(fā)行者確定何時引發(fā)事件,訂戶確定執(zhí)行何種操作來響應該事件。

      • 一個事件可以有多個訂戶。一個訂戶可處理來自多個發(fā)行者的多個事件。

      • 沒有訂戶的事件永遠不會被調(diào)用。

      • 事件通常用于通知用戶操作(如:圖形用戶界面中的按鈕單擊或菜單選擇操作)。

      • 如果一個事件有多個訂戶,當引發(fā)該事件時,會同步調(diào)用多個事件處理程序。要異步調(diào)用事件,請參見使用異步方式調(diào)用同步方法

      • 可以利用事件同步線程。

      • 在 .NET Framework 類庫中,事件是基于 EventHandler 委托和 EventArgs 基類的。

      二. 使用.

           1.定義委托. (也可以基于系統(tǒng)的委托,這樣就可以不用定義啦.)

           2.定義一個事件變量(基于定義的委托.)    //event 委托類型  變量名稱.

           3.發(fā)布

           4.訂閱

       

      代碼
      namespace ConsoleApplication1
      {
          
      using System;
          
      using System.Collections.Generic;

          
      // Define a class to hold custom event info
          public class CustomEventArgs : EventArgs
          {
              
      public CustomEventArgs(string s)
              {
                  message 
      = s;
              }
              
      private string message;

              
      public string Message
              {
                  
      get { return message; }
                  
      set { message = value; }
              }
          }

          
      // Class that publishes an event
          class Publisher
          {

              
      // Declare the event using EventHandler<T>
              public event EventHandler<CustomEventArgs> RaiseCustomEvent;   //2.定義一個事件變量.

              
      public void DoSomething()
              {
                  
      // Write some code that does something useful here
                  
      // then raise the event. You can also raise an event
                  
      // before you execute a block of code.
                  OnRaiseCustomEvent(new CustomEventArgs("Did something"));

              }

              
      // Wrap event invocations inside a protected virtual method
              
      // to allow derived classes to override the event invocation behavior
              protected virtual void OnRaiseCustomEvent(CustomEventArgs e)
              {
                  
      // Make a temporary copy of the event to avoid possibility of
                  
      // a race condition if the last subscriber unsubscribes
                  
      // immediately after the null check and before the event is raised.
                  EventHandler<CustomEventArgs> handler = RaiseCustomEvent;

                  
      // Event will be null if there are no subscribers
                  if (handler != null)
                  {
                      
      // Format the string to send inside the CustomEventArgs parameter
                      e.Message += String.Format(" at {0}", DateTime.Now.ToString());

                      
      // Use the () operator to raise the event.
                      handler(this, e);                                          //3.發(fā)布
                  }
              }
          }

          
      //Class that subscribes to an event
          class Subscriber
          {
              
      private string id;
              
      public Subscriber(string ID)
              {
                  id 
      = ID;
                  
      // Subscribe to the event using C# 2.0 syntax
                  
      //pub.RaiseCustomEvent += HandleCustomEvent;
              }

              
      // Define what actions to take when the event is raised.
              public void HandleCustomEvent(object sender, CustomEventArgs e)
              {
                  Console.WriteLine(id 
      + " received this message: {0}", e.Message);
              }
          }

          
      class Program
          {
              
      static void Main(string[] args)
              {
                  Publisher pub 
      = new Publisher();
                  Subscriber sub1 
      = new Subscriber("sub1");
                  Subscriber sub2 
      = new Subscriber("sub2");

                  pub.RaiseCustomEvent 
      += sub1.HandleCustomEvent;   //4.訂閱
                  pub.RaiseCustomEvent += sub2.HandleCustomEvent;

                  
      // Call the method that raises the event.
                  pub.DoSomething();

                  
      // Keep the console window open
                  Console.WriteLine("Press Enter to close this window.");
                  Console.ReadLine();

              }
          }

      }

       

       

      posted @ 2010-05-10 21:24  SouthAurora  Views(256)  Comments(0)    收藏  舉報
      主站蜘蛛池模板: 国内揄拍国内精品对久久| 欧美大屁股喷潮水xxxx| 亚洲精品熟女国产| 婷婷五月综合激情| 亚洲综合伊人五月天中文| 久久综合给合久久狠狠狠| 国产精品天干天干综合网| 久操热在线视频免费观看| 免费AV片在线观看网址| 久本草在线中文字幕亚洲| 熟女人妻精品一区二区视频| 日韩成人福利视频在线观看| 欧美乱妇狂野欧美在线视频| 一本色道久久东京热| 精品人妻免费看一区二区三区| 青青草无码免费一二三区 | 国产成人综合欧美精品久久| 尤物国产精品福利在线网| 在线午夜精品自拍小视频| 精品人妻少妇一区二区三区| 少妇办公室好紧好爽再浪一点| 色老99久久精品偷偷鲁| 国产精品色内内在线播放 | 亚洲欧美日韩人成在线播放| 亚洲精品一区二区三区在| 中文字幕乱码中文乱码毛片| 这里只有精品在线播放| 成人区人妻精品一区二蜜臀 | 国产亚洲精品aaaa片app| 亚洲精品中文字幕一二三| 精品人妻伦一二三区久久aaa片| 日韩av熟女人妻一区二| 亚洲人成网线在线播放VA| 欧美疯狂xxxxbbbb喷潮| 女子spa高潮呻吟抽搐| 国产午夜福利在线视频| 四虎影视永久在线精品| 九九热在线免费观看视频| 久久精品国产福利一区二区| 亚洲 日本 欧洲 欧美 视频| 无码熟妇人妻av在线电影|