Могу ли я установить обработчик событий в инициализаторе?

Я пишу следующий код:

DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += (object sender, EventArgs e) =>
{
    //...
};
timer.Start();

Но я хочу написать это проще с помощью инициализатора.

Итак, я попробовал это:

new DispatcherTimer
{
    Interval = TimeSpan.FromSeconds(1),
    Tick += (object sender, EventArgs e) =>
    {
        //...
    }
}.Start();

Но возникают ошибки (CS0103, CS0747).

Это невозможное выражение?


person Jeffrey Kang    schedule 04.11.2019    source источник


Ответы (1)


Материал в фигурных скобках — это раздел инициализатора, в котором вы можете инициализировать только общедоступные свойства или поля. Линия

Tick += etc

Не инициализирует Tick, он добавляет к нему обработчик событий, используя +=, что невозможно.

Однако вы можете использовать этот конструктор:

new DispatcherTimer(
    TimeSpan.FromSeconds(1),
    DispatcherPriority.Normal,
    (sender, args) =>
    {
    //...
    },
    Application.Current.Dispatcher)
        .Start();

Лично я думаю, что вариант с несколькими строками кода легче читать.

person Tim Rutter    schedule 04.11.2019