如何在处理其他事情时保持计时器运行

时间:2016-04-09 21:38:37

标签: c# multithreading selenium timer multiprocessing

我有一个60秒的计时器倒计时和一个检查元素是否在网页上退出的任务(waituntil 60s)。问题是当我点击按钮开始。在Web驱动程序抛出超时异常之前,计时器不会启动。我不知道它为什么在计时器之前运行try-catch块。

我的问题是如何让计时器和try-catch块同时工作。如果抛出异常,计时器就会停止。

有什么想法吗?我感谢您的帮助。 感谢。

private void timer1_Tick(object sender, EventArgs e)
    {
        counter--;
        if (counter == 0)
            timer1.Stop();
        txtTimer.Text = counter.ToString();
    }


private void button2_Click(object sender, EventArgs e)
    {
        int counter = 60;
        timer1 = new System.Windows.Forms.Timer();
        timer1.Tick += new EventHandler(timer1_Tick);
        timer1.Interval = 1000; // 1 second
        timer1.Start();
        txtTimer.Text = counter.ToString();

        // Check if user is already logged in. If not => exit
        try
        {
            driver.FindElement(By.Id("logout"));
        }
        catch (Exception)
        {
            MessageBox.Show("Error: Please login first.");
            return;
        }
        button1.Enabled = true;
    }

1 个答案:

答案 0 :(得分:0)

它没有在定时器代码之前运行try catch,定时器在与selenium代码相同的线程中运行,所以当它遇到try catch时,FindElement根据一些隐含的等待时间来保存线程到达selenium。 / p>

您需要使用多线程计时器,例如System.TimersSystem.Threading.Timer中的计时器。