C#中事件的定义和使用

2019-12-30 12:49:01王振洲

最后,我们需要知道事件是否被触发,为了记录下事件触发的历史记录,我们在ListBox控件添加触发内容。由于事件触发后调用的方法是OnFileChange,因此我们将操作放在该方法里:

 

复制代码 private void OnFileChange(object Sender, EventArgs e)
{
   listBox.Items.Add(DateTime.Now.ToString()+": 文件发生改变.");
}

 

当触发事件时,EventHanler会传递sender和EventArgs类的引用。EventArgs类通常是在事件源和触发事件器之间传递信息。在本例中,没有传递信息,也没有用到EventArgs类。而只是将事件添加到了ListBox中。

运行结果如下:

C#,事件

结论:在C#中使用事件的要点:

首先,要建立委托,格式为:
public delegate void 委托名(object sender, EventArgs e);
注意:委托即C里的函数指针,在事件中由于要传递事件及触发事件的对象的信息,因此参数表是固定的。委托名一般格式是:名字+EnvenHandle。这样取名比较规范。

然后,建立一个事件字段:
public event 委托类型 事件名;
注意:event关键字代表事件,返回类型为委托;

再定义一个方法,处理事件,再本例中为OnFileChange(EventArgs e)。在该方法中应该调用事件:
事件名(object ,EventArgs);
这里object一般为本身,实参应为this,EventArgs应为OnFileChange中传递过来的实参,尤其是要传递事件的值。

最后还要创建触发事件的方法。例子中为MonitorFile(),在其方法中,当条件满足则调用OnFileChange来达到触发事件的目的。

在使用事件时,通常要定义两个方法,一个是和事件定义的委托签名一致的方法,在本例中为OnFileChange(Object sender,EventArgs e);

注意在例子中,窗体类的OnFileChange和事件类的OnFileChange是不同的。后者用于调用事件,前者则用于绑定事件。绑定事件的方法很简单,用+=表示添加事件,-=表示删除事件。
例子中
FileWatchEventSource.FileWatchEvent+=new Sample.Event.FileWatchEventHandler(OnFileChange);