“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) =>

【问题讨论】:

明确“警告”与“错误”。最好发布文字错误消息。 由于它只发生在一个项目中,请尝试明确指定类型。像这样初始化yearIncreasernew System.Timers.Timer() 和像这样初始化ElapsedEventArgsSystem.Timers.ElapsedEventArgs “这是由于 not 包括 ElapsedEventArgs 参数”是什么意思? 还可以尝试在 Elapsed 中使用 lambda,如下所示:yearIncreaser.Elapsed += (sender, args) => 。然后在 Visual Studio 中将鼠标悬停在 senderargs 上,看看它们的类型是否符合您的预期 @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#

如何正确动画模型

接口的重载方法不能接受联合类型:“没有重载匹配此调用”

打字稿路由错误 - 没有重载匹配此调用

打字稿,样式组件错误:TS2769:没有重载匹配此调用。重载 1 of 2

没有重载匹配此调用 - 宽度