【问题标题】:No overload for 'mysql' matches delegate 'ElapsedEventHandler'. Windows Service C#“mysql”没有重载匹配委托“ElapsedEventHandler”。 Windows 服务 C#
【发布时间】:2018-09-14 00:40:20
【问题描述】:

我开发了一个 Windows 服务,用于将文件从一个位置复制到另一个位置。

由于我需要在后台运行服务,因此有必要实现计时器功能。

Service.cs

  protected override void OnStart(string[] args)
        {
            //OnStart(new string[0]);


        }


        public void Start()
        {

            timer1 = new Timer();
            this.timer1.Interval = 30000; //every 30 seconds
           41 ***this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.mysql);***
            timer1.Enabled = true;
           43 mysql();
        }

        static void mysql()
        {
             **File copy code included in this function.
         }

上面提到的第41行的错误触发是,

“mysql”没有重载匹配委托“ElapsedEventHandler”。

【问题讨论】:

    标签: c# windows-services


    【解决方案1】:

    像这样在 mysql() 上设置参数

    static void mysql(object sender, ElapsedEventArgs e)
    

    我希望它对你有用:)

    ++通过评论添加

    此代码将允许定时器使用间隔

    在 Start() 中添加此代码

            this.timer1.Interval = 1000;
            this.timer1.Tick += new System.EventHandler(this.mysql_tick);
    

    并从 Start() 中添加此代码

    private void mysql_tick( object sender, EventArgs e ){
    blah blah... }
    

    ++ 之后你需要使用 timer1.Start();使用 mysql_tick

    ++ timer1.Stop();将停止工作。

    【讨论】:

    • 感谢您的回答。不幸的是,这将导致第 43 行(代码上方)@Arphile 中的另一个错误“没有给出与 'Service1.mysql(object, ElapsedEventArgs) 的所需形式参数'sender'相对应的参数”
    • 你需要设置mysql();的参数也是。它将作为 mysql(null, null);因为你不会使用 sender 和 e
    • 请您介意我告诉我如何设置 mysql() 参数! @Arphile
    • mysql(null, null);将工作。如果您不想使用 null 进行调用,请尝试这样的编辑方法。 static void mysql(object sender = null, ElapsedEventArgs e = null) if then, mysql();会工作
    • 非常感谢,终于成功了。还有一件事,尽管没有编译错误,但程序不会在后台运行。它输出正确的文件,但我需要在后台运行它,因为文件需要每 5 分钟移动一次。这就是实现 Timer 功能的原因。你知道它为什么开始和停止吗? @Arphile
    猜你喜欢
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多