Отправляет email-рассылки с помощью сервиса Sendsay

За 2018-12-17

[prg] Re: События в C#

Здравствуйте.

17.12.2018 5:40, Кирилл пишет:
> Привет уважаемому собранию.
>
>
> Никак не разберусь с событиями. Покажите, плз, конкретный пример кода (с
> краткими комментариями) для C#. Есть переменная int i. Нужно, чтобы
> когда в переменной появлялось определённое значение, скажем, 5,
> срабатывало событие, скажем, проигрывался звук Console.Beep(3000,250).
> Как отслеживать изменения этой переменной?

Вообще суть в том, что событие вызывается методом, который изменяет само
значение переменной.

Далее пример от сюда:
https://docs.microsoft.com/ru-ru/dotnet/api/system.eventhandler?view=netframework-4.7.2

public class ThresholdReachedEventArgs : EventArgs // класс
унаследованный от EventArgs , в котором передаются параметры события, в
данном случае пороговое значение и время, в вашем случае это могло быть
значение переменной i
{
public int Threshold { get; set; }
public DateTime TimeReached { get; set; }
}

class Counter //класс в котором происходит какое-то событие
{

public event EventHandler<ThresholdReachedEventArgs>
ThresholdReached; // событие на которое будут подписываться получатели и
которое будет вызываться при добавлении значения

private int threshold;
private int total;

public Counter(int passedThreshold)
{
threshold = passedThreshold;
}

public void Add(int x) // метод, где добавляется значение и
вызывается событие
{
total += x;
if (total >= threshold) // если total превышает какой-то
порог вызвать событие
{
ThresholdReachedEventArgs args = new
ThresholdReachedEventArgs(); // создаем объект класса
ThresholdReachedEventArgs , определенного выше, и заполняем его значениями
args.Threshold = threshold;
args.TimeReached = DateTime.Now;
OnThresholdReached(args); // вызываем метод вызывающий
само событие и передаем ему данные
}
}

protected virtual void
OnThresholdReached(ThresholdReachedEventArgs e) // метод вызывающий событие
{
EventHandler<ThresholdReachedEventArgs> handler =
ThresholdReached;
if (handler != null) // проверяет делегат события на null и
вызывает его
{
handler(this, e);
}
}

Дальше вы можете подписываться на это событие следующим образом:

class Program
{
static void Main(string[] args)
{
Counter c = new Counter(new Random().Next(10)); // Создаем
экземпляр класса Counter

c.ThresholdReached += c_ThresholdReached; // подписываемся на событие
ThresholdReached
}

static void c_ThresholdReached(object sender,
ThresholdReachedEventArgs e) // метод, который будет вызываться, когда
срабатывает событие
{
Console.WriteLine("The threshold of {0} was reached at
{1}.", e.Threshold, e.TimeReached);
Environment.Exit(0);
}
}

--

С уважением, Константин.

   2018-12-17 13:46:46 (#3597131)

[prg] События в C#

Привет уважаемому собранию.

Никак не разберусь с событиями. Покажите, плз, конкретный пример кода (с
краткими комментариями) для C#. Есть переменная int i. Нужно, чтобы
когда в переменной появлялось определённое значение, скажем, 5,
срабатывало событие, скажем, проигрывался звук Console.Beep(3000,250).
Как отслеживать изменения этой переменной? Через таймер что ли?
Запускать таймер и каждые 1 мс следить, что появилось в int i? Или есть
более гуманный способ?

   2018-12-17 05:41:14 (#3597075)