【问题标题】:No overload for matches delegate 'System.Timers.ElapsedEventHandler'匹配委托“System.Timers.ElapsedEventHandler”没有过载
【发布时间】:2020-12-21 10:07:23
【问题描述】:

我正在阅读这篇文章:http://www.c-sharpcorner.com/UploadFile/naresh.avari/develop-and-install-a-windows-service-in-C-Sharp/ 因此,由于缺乏知识,我在玩 Windows 服务时遇到了一点问题。在这部分代码中:

 protected override void OnStart(string[] args)
    {
        timer1 = new Timer();
        this.timer1.Interval = 10800; 
        this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Tick);
        timer1.Enabled = true;
    }

    private void timer1_Tick()
    {
       //some code here
    }

    protected override void OnStop()
    {
        timer1.Enabled = false;
      //some code here

    }

this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Tick); 给出:

错误 1 ​​'timer1_Tick' 没有重载匹配委托 'System.Timers.ElapsedEventHandler'

我想知道为什么很多人对这个例子没有意见?

【问题讨论】:

  • 签名应该是private void timer1_Tick(object sender, EventArgs e),就像大多数事件处理程序一样。
  • @minitech: 你可能想使用 ElapsedEventArgs 而不是 EventArgs。
  • 或者您在复制示例时打错了或示例不正确。 [检查,你打错了]
  • 谢谢你们,我感谢最完整的答案,但谢谢你们。

标签: c#


【解决方案1】:

事件只是多播委托。并且您的方法签名与委托签名不匹配,在您的情况下为 ElapsedEventHandler 委托。

你必须改变你的代码:

 protected override void OnStart(string[] args)
{
    timer1 = new Timer();
    this.timer1.Interval = 10800; 
    this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Tick);
    timer1.Enabled = true;
}

private void timer1_Tick(object sender, ElapsedEventArgs elapsedEventArg)
{
   //some code here
}

protected override void OnStop()
{
    timer1.Enabled = false;
  //some code here

}

您也可以:

this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Tick);

这样做:

timer.Elapsed += this.timer1_Tick;

【讨论】:

  • private void timer1_Tick(object sender, ElapsedEventArgs elapsedEventArg) 做到了。谢谢。
  • 在我的情况下,我在 Object 中使用了大写的“O”。改成小写就可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-26
相关资源
最近更新 更多