Добавить событие к объекту и обработать его

#c# #events #event-handling

#c# #Мероприятия #обработка событий

Вопрос:

У меня есть объект memorystream, который должен обновляться через определенный интервал времени.

Когда происходит обновление объекта memorystream, событие должно быть создано и вызвано. Затем должен существовать обработчик событий для обработки вызванного события.

Пожалуйста, предложите любой код или пример для ссылки.

Заранее спасибо.

Ответ №1:

Вы вообще знаете логику события?

Если это так, создайте событие в классе, в котором будет обновляться ваш поток памяти. При его обновлении вызывайте событие.

В классе-потребителе зарегистрируйте событие.

И, по сути, это все?

Возможно, ваши сомнения связаны с событиями в целом. Для этого я бы посоветовал вам прочитать MSDN, например

Ответ №2:

Есть несколько способов, которыми вы могли бы это сделать.

Самым простым способом был бы тот, который предложил парень, который только что опередил меня, и вместо вызова MemoryStream.Напрямую напишите в своем приложении метод Write(), который вызывает MemoryStream.Write(), а затем вызывает событие, которое вы объявляете самостоятельно вне объекта MemoryStream.

В более экзотическом, но более сжатом варианте вы могли бы проявить смелость и наследовать класс из MemoryStream, где вы добавляете свойство event и переопределяете метод Write() (или любой другой метод (ы), который вы вызываете для выполнения записи), чтобы вызвать метод базового класса Write(), а затем вызвать событие. Некоторым может не понравиться этот подход, и он может быть не идеальным или проблематичным в зависимости от того, как вы используете MemoryStream, но он выполнит нужную вам работу и избавит вас от необходимости самостоятельно вызывать событие каждый раз, когда вы пишете.

Комментарии:

1. 1. Я также хотел предложить переопределить метод Write (), на мой взгляд, это было бы наиболее правильным способом

Ответ №3:

Хороший пример регистрации и создания пользовательских событий можно найти на 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()
    {
    }
  }
}
  

Комментарии:

1. Спасибо, что нашли данные и включили их в ответ!