将事件添加到对象&处理它

时间:2011-04-26 12:16:58

标签: c# events event-handling

我有一个要在特定时间间隔内更新的内存流对象。

当在memorystream对象上发生更新时,应该创建事件&提高。 然后应该有一个事件处理程序来处理引发的事件。

请为参考建议任何代码或样本。

提前致谢。

3 个答案:

答案 0 :(得分:2)

你知道事件的逻辑吗?

如果是,请在将更新内存流的类中创建一个事件。 更新时,请举起活动。

在班级'消费者注册活动。

而且,基本上就是这样吗?

也许你的怀疑是一般事件。为此,我建议您阅读MSDN,例如

答案 1 :(得分:1)

有几种方法可以解决这个问题。

最简单的方法是那个刚刚打败我的人,而不是直接调用MemoryStream.Write(),在你的应用程序中编写一个调用MemoryStream.Write()然后调用一个事件的方法。你在MemoryStream对象之外声明自己。

在更奇特但更简洁的角落里,你可能会大胆并从MemoryStream继承一个类,你在其中添加一个事件属性并覆盖Write()方法(或者你调用的任何方法来写)调用基类Write()方法,然后引发事件。有些人可能会采用这种方法,根据你使用MemoryStream的方式,它可能不太理想或有问题,但它可以完成你想要的工作,让你不必在每次写作时自己提升事件。

答案 2 :(得分:0)

有关注册和提升自定义事件的详细示例,请访问http://www.switchonthecode.com/tutorials/csharp-snippet-tutorial-custom-event-handlers

更新:链接已损坏,我使用archive.org从那里引用(更改事件提升部分以避免竞争条件):

using System;

namespace CustomEvents
{
  public class Car
  {
    public delegate void OwnerChangedEventHandler(string newOwner);
    public event OwnerChangedEventHandler OwnerChanged;

    private string make;
    private string model;
    private int year;
    private string owner;

    public string CarMake
    {
      get { return this.make; }
      set { this.make = value; }
    }

    public string CarModel
    {
      get { return this.model; }
      set { this.model = value; }
    }

    public int CarYear
    {
      get { return this.year; }
      set { this.year = value; }
    }

    public string CarOwner
    {
      get { return this.owner; }
      set
      {
        this.owner = value;
        // To avoid race condition
        var ownerchanged = this.OwnerChanged;
        if (ownerchanged != null)
          ownerchanged(value);
      }
    }

    public Car()
    {
    }
  }
}