Мне было трудно разобраться с приведенным выше примером @ spender, особенно с: Object.assignHandler((sender) => evHandler(sender,someData));
, потому что нет такой вещи, как Object.assignHandler
в буквальном смысле.Таким образом, я сделал немного больше поиска и нашел этот пример .Ответ Питера Дунихо был тот, который щелкнул в моей голове (это не моя работа):
snip
Обычный подход заключается в использовании анонимного метода с обработчиком событийэто ваша измененная подпись.Например:
void Onbutton_click(object sender, EventArgs e, int i) { ... }
button.Click += delegate(object sender, EventArgs e)
{ Onbutton_click(sender, e, 172); };
Конечно, вам не нужно передавать 172 или даже делать третий параметр целым.:)
/ snip
Используя этот пример, я смог передать два пользовательских ComboBoxItem
объекта в событие Timer.Elapsed
, используя лямбда-нотацию:
simulatorTimer.Elapsed +=
(sender, e) => onTimedEvent(sender, e,
(ComboBoxItem) cbPressureSetting.SelectedItem,
(ComboBoxItem) cbTemperatureSetting.SelectedItem);
и затем в его обработчик:
static void onTimedEvent(object sender, EventArgs e, ComboBoxItem pressure, ComboBoxItem temperature)
{
Console.WriteLine("Requested pressure: {0} PSIA\nRequested temperature: {1}° C", pressure, temperature);
}
Это не какой-либо новый код из примеров выше, но он демонстрирует, как их интерпретировать.Надеюсь, кто-то вроде меня сочтет это поучительным и полезным, чтобы не тратить часы, пытаясь понять концепцию, как я.
Этот код работает в моем проекте (за исключением не поточнобезопасного исключения с объектами ComboBoxItem
, которое, я не верю, меняет работу примера).Сейчас я это выясняю.