如何在 C# 中暂停计时器直到过程完成

How to pause timer till procedure within finishes in C#

我正在构建服务。

此服务处理并将文件从一个文件夹移动到另一个文件夹。

这个服务中有一个定时器,每分钟检查一次,看是否有文件要移动并移动它们

发生的事情是当它启动时移动文件,但如果文件数量很大,则需要超过 1 分钟,这会导致再次调用相同的过程并出现错误

我希望计时器暂停,直到内部函数完成,然后再返回

这是我的代码

    protected override void OnStart(string[] args)
    {

            Timer timer = new Timer();
            timer.Interval = IntervalLength;
            timer.Elapsed += new ElapsedEventHandler(this.OnTimer);
            timer.Start();
    }

    public void OnTimer(object sender, ElapsedEventArgs args)
    {
        this.Stop();

        DO();

        this.Start();

    }

    private void DO()
    {
     //Process and move files
    }

我添加了 Stop 来停止计时器,但是 Start() 给出了这个错误

Severity Code Description Project File Line Suppression State Error CS1061 'XMI2DBSrv' does not contain a definition for 'Start' and no accessible extension method 'Start' accepting a first argument of type 'XMI2DBSrv' could be found (are you missing a using directive or an assembly reference?) XMI2DB E:\XMI2DBsrv.cs 73 Active

怎么做?

在您的 OnTimer 方法中,您使用的是 this。但是 this 指的是包含该方法的 class,而不是 Timer 对象。

您需要在 Timer 对象上调用 Start 和 Stop,在本例中为 sender

因此,您要找的是((Timer)sender).Start();