我很难弄清楚上面@spender 的例子,尤其是:Object.assignHandler((sender) => evHandler(sender,someData));,因为从字面上看,没有Object.assignHandler 这样的东西。所以我做了更多的谷歌搜索,找到了this example。 Peter Duniho 的回答让我印象深刻(这不是我的工作):
剪辑
通常的方法是使用带有事件处理程序的匿名方法
有你修改过的签名。例如:
void Onbutton_click(object sender, EventArgs e, int i) { ... }
button.Click += delegate(object sender, EventArgs e)
{ Onbutton_click(sender, e, 172); };
当然不用传入172,甚至不做第三个参数
一个整数。 :)
/snip
使用该示例,我能够使用 lambda 表示法将两个自定义 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 对象的非线程安全异常,我不相信它会改变示例的工作方式)。我现在想通了。