利用自定义的Event或者使用Action实现对象之间的通信

两个对象之间如果要进行通信,我们可以使用Event,或者是Action来解决,在实际的开发过程中,当需要在类A中调用类B中的一个异步执行的方法,然后又希望B中的方法执行完之后需要触发A类中的一些操作,这个时候我们就应该想到事件。

通常情况下,我们了解最多的是控件的事件,然后控件的事件的触发一般都是通过外界输入来触发的,譬如鼠标点击控件触发,键盘有按键时触发。事件触发后我们就可以在注册事件的EventHandle中处理和响应事件。其实,完全也可以自己定义事件,通过代码的形式来触发事件。

下面我通过下面的例子,介绍两种对象间通信的方法:例子非常简单

1、新建一个Windows应用程序,在Form1上面拖放连个控件,一个用来测试自定义的Event触发的事件,一个用Action测试的。

2、新建另一个和Form1.cs通信的类ActionEvent.cs;

先贴上代码:

Form1.cs:

 

ExpandedBlockStart.gif 代码
using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Linq;
using  System.Text;
using  System.Windows.Forms;

namespace  EventTest
{
    
public   partial   class  Form1 : Form
    {
        
public  Form1()
        {
            InitializeComponent();
        }


        
private   void  button1_Click( object  sender, EventArgs e)
        {
            ActionEvent demo 
=   new  ActionEvent();
            
// 注册事件
            demo.EventAction  +=   delegate
            {
                MessageBox.Show(
" Ok " );
            };
        }

        
private   void  button2_Click( object  sender, EventArgs e)
        {
            ActionEvent demo 
=   new  ActionEvent();
            Action sysAction 
=   delegate  { MessageBox.Show( " Ok " ); };
            demo.SystemAction 
=  sysAction; // 公用一个事件委托
        }
        
    }
}

 

EventAction.cs

 

ExpandedBlockStart.gif 代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;

namespace  EventTest
{
    
class  ActionEvent
    {
        
public   delegate   void  MyAction();
        
public   event  MyAction EventAction;

        
public  Action SystemAction {  get set ; }

        
public  ActionEvent()
        {
            System.Threading.Thread thread 
=   new  System.Threading.Thread( new  System.Threading.ThreadStart(Start));
            thread.Start();
        }
        
void  Start()
        {
            System.Threading.Thread.Sleep(
3000 );
            
if  (EventAction  !=   null )
                EventAction();
// 触发事件
             if  (SystemAction  !=   null )
                SystemAction();
// 触发事件
        }
    }
}

 

这个例子想说明的实际就是:

当使用Event时候,当ActionEvent类中的事件触发的时候,它将会使得所有注册过它的类中的委托或方法响应它;

当时用Action时,其实是两个类公用了一个委托的引用,当其中一个引用触发时候,另一个当然也就同时被激发了。

很简单的Demo,然后其实在项目中异步编程的时候经常可以排上用场的:)

          

转载于:https://www.cnblogs.com/shineqiujuan/archive/2011/01/11/1933168.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值