定时器在经过时间间隔之前触发

Mr *_*day 0 .net c# timer winforms

我正在尝试创建一个搜索字符串的Windows窗体应用程序,并有三种可能的方案:

  1. 字符串1找到 - 等待
  2. 字符串2找到 - 停止
  3. 否则 - 执行操作并等待1分钟

我只是在期待等待的时候遇到我的问题.发生这种情况时,newTimer_Tick开始每秒都打勾.我已经尝试在计时器和其他一些东西时禁用计时器,但似乎都没有.以下是代码:

public void Action(string result)
{
    if (result.Contains("string1"))
    {
        // Check again in 10 + x seconds
        int n = new Random().Next(0, 5000);
        int newtime = 10000 + n;
        newTimer.Tick += new EventHandler(newTimer_Tick);
        newTimer.Interval = newtime;
        newTimer.Enabled = true;
    }
    else if (result.Contains("string2"))
    {
        // Turn off
        newTimer.Enabled = false;
    }
    else
    {
        // Perform action and tick again in 1min + x seconds
        action1();

        int n = new Random().Next(0, 5000);
        int newtime = 600000 + n;
        newTimer.Tick += new EventHandler(newTimer_Tick);
        newTimer.Interval = newtime;
        newTimer.Enabled = true;
    }
}

private void newTimer_Tick(object sender, EventArgs e)
{
    Action( result );
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

Phi*_*hil 5

每次调用以下行时,事件处理程序newTimerTick的新实例都会添加到Tick事件的调用列表中:

newTimer.Tick += new System.EventHandler(newTimer_Tick);
Run Code Online (Sandbox Code Playgroud)

因此,每当时间滴答消失时,newTimerTick将被多次调用,这将给您带来意想不到的结果.

仅配置一次事件处理程序.在构造函数中将是一个明智的地方.