专注于自动化测试,性能测试.......

C#的事件机制

上一篇 / 下一篇  2008-03-12 14:29:57 / 个人分类:C# Programming

%sZ%V-^Y&jc&RS9q%iFy0/*
0W#UGSM0 * 我已经在该例中把创建,发送,触发,处理事件的过程用一步步的步骤描述出来了,不过现在还是迷迷糊糊的,有不明白的地方请见谅.
o2b"?u ]#gO(ltA/K0 */51Testing软件测试网&f(W;[ d(z&p7E;V O

6U3A v&s;Ac051Testing软件测试网O [g#]b _8w~ v(~b6XS
using System;51Testing软件测试网#W_1Dz O.]._l"e Z@
//命名空间51Testing软件测试网*rsA^ BV(iW.E
namespace testEventApp
7lh6c]_I"G k0{51Testing软件测试网|L,F0@Z.Cd ]G
/*第一步:创建一个委托*/

GF+kB'f p0

J2[%N,L$l8W0    //定义委托Class2_Event_Handler51Testing软件测试网eBN\k
    public delegate void Class2_Event_Handler(object sender, string strEventArg);51Testing软件测试网gs ~~cw;GS8u

y\8M+ZM5?F3O x0 /// <summary>51Testing软件测试网t+twC*iD5n
 /// Class1 的摘要说明。
k:@I?qx0 /// </summary>
Dw(q3jJ7R9gY0/*=======================================================================
*Rr}Y7HijJ0    事件接收方类
!\ D,K1k Vv0=======================================================================*/

^ tp0A$P1S051Testing软件测试网 u8hWZ,f

 
@ml p&U8~:J_&A(w0    //定义类Class151Testing软件测试网M;O{*H#|ik$?)g
 class Class151Testing软件测试网1ZAFx%dz
 {
}2id] | M0        //创建类Class1的默认构造器51Testing软件测试网{V,v%X'DFGrK
  public Class1()51Testing软件测试网T0D6W*X,@Gi
  {51Testing软件测试网|8xSV-jg r+X`8o)j
   Console.WriteLine ("Class1>>>创建一个Class1对象!");
9L i _-r)J0t,z0  }
\gP V$Kf(? V,}-~Q5c-MV0/*第四步:编写事件处理函数,该函数要具有与第一步中创建的委托相同的签名51Testing软件测试网MtWc Vk;bH!O
 */51Testing软件测试网SyQYtT$[9X U4Fq
        private void On_Class2Event(object sender, string strEventArg)
onTBB9O6dPOE0        { //Class2中事件发生时的处理函数51Testing软件测试网Ho1G7m5[8X%\7CV
            Console.WriteLine("Class1>>>收到Class2中的事件:" + strEventArg);
;S&oy$D4\e_7]0            if (strEventArg == "exit")
(}A$} kLqVmsVq0            {51Testing软件测试网!\A&YoOa
                Class2 senderRef = (Class2)sender;51Testing软件测试网4t;o,|&l9q
                //取消事件处理函数与Class2中事件的关联51Testing软件测试网:A6vV D1`.i'~;k]
                senderRef.Class2_Event -= new Class2_Event_Handler(this.On_Class2Event);51Testing软件测试网0^.P F.i-f.L
                Console.WriteLine("Class1>>>不再接收Class2的事件!输入exit退出!");
j]P0Q!DI/F2i0            }
JR,G3Uq a%a]0^0        }
^U7Nx:G0  /// <summary>
d/i/h2j@_0  /// 应用程序的主入口点。51Testing软件测试网Y&B/kk]+WQz&L4nxL
  /// </summary>51Testing软件测试网]KQ/s5or
  [STAThread]51Testing软件测试网v0TJ6N{;s

51Testing软件测试网x,l1t G2N F

  static void Main(string[] args)51Testing软件测试网;`m y\*m7q|&m2G
  {
d)kE(f3R,t/M0   //51Testing软件测试网e4s&\&QyN1?
   // TODO: 在此处添加代码以启动应用程序51Testing软件测试网D*X BeN&]^t
   //
Z&Vq0Y*u?2?~0   Class1 aClass1 = new Class1 ();
fp?G^0u0   Class2 aClass2 = new Class2 (); //创建一个Class2对象51Testing软件测试网Y H:~%Cj+al k9_
/*第五步:将第四步中编写的事件处理函数与事件建立关联(也就是利用事件处理函数生成第一步中创建的委托的委托实例)
2?+mOFi_0 */
8awY&~j2k,o(u%o w0   //将事件处理函数与Class2中的事件关联51Testing软件测试网K6h[0[X-R
   aClass2.Class2_Event += new Class2_Event_Handler(aClass1.On_Class2Event );51Testing软件测试网 }]C b_{lg|
   //调用Class2中的方法,等待其触发事件51Testing软件测试网+OwOkp3t
   aClass2.Class2_Event_Riser ();51Testing软件测试网_%XW7O/AY3VS.A
  }

2h+D f^5eT(z3KF oF051Testing软件测试网v A}Q)p[U`(pze

  
1A1Z:wH \!zA0 }51Testing软件测试网 o8Q2{jbg Qpz0s
    /*=====================================================================
.i2M+aTy B0        事件发送方类51Testing软件测试网7v y#` x;I3d2u)w
    =====================================================================*/51Testing软件测试网k,I#F5A1` G
    //定义类Class2
/T,q2\5WT/z0 class Class251Testing软件测试网!apH!y0i R-q xK
 {
.K4`~ U*M0        /*定义类Class2的构造器*/
N{.YD%vSQ0  public Class2()51Testing软件测试网9[Y-f.y&U2@E1h'}a
  {51Testing软件测试网5~m*Q!T(~%\1A%a)Hy
   Console.WriteLine ("Class2>>>创建一个Class2对象!");
R/]5m M,OwY0  }

zG$k l7Kv.e:i0

i|&L1uXDG#Pk(s.`0/*第二步:利用第一步中创建的委托创建事件,这样委托和时间之间就建立了关联(.NET类库中的很多事件都是已经订制好的,所以它们都有相应的51Testing软件测试网+y q M*E,^B Bn
  委托,在编写关联时间处理程序(也就是有事件发生时我们要执行的方法的时候)我们需要和这个委托相同的签名。*/
/{k1U0t9g,f0  //利用delegate,定义一个事件
H8W.x,^R0        //在类中声明一个事件的格式: public event 委托名 事件名51Testing软件测试网)r)` v5R']-@k1w
  public event Class2_Event_Handler Class2_Event;

]xHhDoFJ)D z051Testing软件测试网 ^](J'Nnc;M

/*第三步:创建可以触发事件的方法*/

M5p/xK6Fuf051Testing软件测试网A9N@m%|

  //一个可以触发事件的方法
D7@U5F B'V2e0  public void Class2_Event_Riser()51Testing软件测试网!e2q3CB}&R)rP
  {
j5z0T9w1q+V{Y0   string strRead;51Testing软件测试网o1F0N5zW Ry3b6SS
   while(true)51Testing软件测试网.NnW!i$q0K~
   {51Testing软件测试网P%C.be[ b2S
    Console.Write ("Class2>>>");51Testing软件测试网y+hf&y2sy4Y ~ U t!EB)k
    strRead = Console.ReadLine ();51Testing软件测试网Nx6X Op&h%L(k;O

51Testing软件测试网#x:ME"YCt

    if ( Class2_Event!=null )//当事件处理函数存在时
5f(qz$w)E%nSI(b0    {
&k#r,P/@b0     Console.WriteLine ("Class2>>>发送事件:"+strRead);51Testing软件测试网9j[!~(_ Y,p!Fo$_
     Class2_Event(this, strRead);//触发delegate中的事件处理函数51Testing软件测试网 S.UP o*aCh B2H
    }51Testing软件测试网 ^;X5e9PK c&t.C
    else if (strRead == "exit")
Tg:u-`+T | o{9b0    {51Testing软件测试网'mf @%_!ae0`?P \
     System.Environment .Exit (-1);    51Testing软件测试网&H i.kD eZ
    }51Testing软件测试网0a)h1Wy|
   }51Testing软件测试网5A|q5TN1a-Jj JJA
  }
,aX2R$rl!Lix0 }51Testing软件测试网j\{ |K,z9k \S8M
}51Testing软件测试网ASDq/M

$R#^M-Z B9N4g0

TAG: 编程学习

 

评分:0

我来说两句

wxf_xsfy

wxf_xsfy

自动化测试的拥簇者,善于自动化测试的框架和工具开发,TIB工作室核心成员

日历

« 2024-04-06  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 381144
  • 日志数: 79
  • 图片数: 1
  • 文件数: 1
  • 书签数: 3
  • 建立时间: 2007-09-19
  • 更新时间: 2018-01-30

RSS订阅

Open Toolbar