“onTimer”没有重载匹配委托“ElapsedEventHandler”
Posted
技术标签:
【中文标题】“onTimer”没有重载匹配委托“ElapsedEventHandler”【英文标题】:No overload for 'onTimer' matches delegate 'ElapsedEventHandler' 【发布时间】: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# 文件中重现该错误。
【参考方案1】:
也许其他人会需要它。
我只是将对象更改为对象:
static void setTimer()
yearIncreaser.Elapsed += onTimer;
yearIncreaser.Enabled = true;
yearIncreaser.AutoReset = true;
static void onTimer(object source, ElapsedEventArgs e)
currentYear++;
【讨论】:
以上是关于“onTimer”没有重载匹配委托“ElapsedEventHandler”的主要内容,如果未能解决你的问题,请参考以下文章
'mysql'没有重载匹配委托'ElapsedEventHandler'。 Windows服务C#