【发布时间】:2020-06-26 23:21:57
【问题描述】:
通常当人们收到“'onTimer' 没有重载与委托 'ElapsedEventHandler' 匹配”错误时,这是由于没有在每次计时器经过时运行的 void 中包含 ElapsedEventArgs 参数。此外,当我将代码复制并粘贴到解决方案之外的文件中时,错误似乎消失了,所以我很困惑。有人知道更简单的方法来解决这个问题吗?
static void setTimer()
{
yearIncreaser.Elapsed += onTimer;
yearIncreaser.Enabled = true;
yearIncreaser.AutoReset = true;
}
static void onTimer(Object source, ElapsedEventArgs e)
{
currentYear++;
}
编辑: 是的,调试屏幕产生的官方错误消息是:错误 CS0123:'onTimer' 没有重载与委托 'ElapsedEventHandler' 匹配
EDIT2:解决方案是改变 yearIncreaser.Elapsed += onTimer;变成一个 lambda:yearIncreaser.Elapsed += (sender, args) => { }
【问题讨论】:
-
明确“警告”与“错误”。最好发布文字错误消息。
-
由于它只发生在一个项目中,请尝试明确指定类型。像这样初始化
yearIncreaser:new System.Timers.Timer()和像这样初始化ElapsedEventArgs:System.Timers.ElapsedEventArgs -
“这是由于 not 包括 ElapsedEventArgs 参数”是什么意思?
-
还可以尝试在
Elapsed中使用 lambda,如下所示:yearIncreaser.Elapsed += (sender, args) => { }。然后在 Visual Studio 中将鼠标悬停在sender和args上,看看它们的类型是否符合您的预期 -
@Henk Holterman 我看到有人在使用 System.Timers.Timer 时遇到同样问题的唯一一次是当他们键入类似 static void onTimer() 而不是 static void onTimer(Object source, ElapsedEventArgs e)。我只能通过键入 onTimer(Object source)(删除“ElapsedEventArgs e”参数)在另一个 C# 文件中重现该错误。
标签: c# delegates system.timers.timer