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

C# 在处理其他事情时,如何保持计时器运行,c#,multithreading,selenium,timer,multiprocessing,C#,Multithreading,Selenium,Timer,Multiprocessing,我有一个60秒的计时器倒计时和一个检查网页上是否存在元素的任务(等待到60秒)。问题是当我点击按钮开始时。直到web驱动程序引发超时异常,计时器才会启动。我不知道为什么它在计时器之前运行try-catch块 我的问题是如何使计时器和尝试捕捉块同时工作。如果抛出异常,计时器将停止 有什么想法吗?我感谢你的帮助。 谢谢 它没有在计时器代码之前运行try-catch,计时器与selenium代码在同一个线程中运行,因此当它遇到try-catch时,FindElement根据绑定到selenium中的某

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

我的问题是如何使计时器和尝试捕捉块同时工作。如果抛出异常,计时器将停止

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


它没有在计时器代码之前运行try-catch,计时器与selenium代码在同一个线程中运行,因此当它遇到try-catch时,FindElement根据绑定到selenium中的某个隐式等待时间保存线程


您需要使用多线程计时器,例如
System.Timers
System.Threading.timer

为什么不能使用
wait.Until
(显式等待,此处解释:),例如
WebDriverWait wait=newwebdriverwait(驱动程序,TimeSpan.FromSeconds(60));IWebElement myDynamicElement=等待.Until((d)=>{return d.FindElement(By.Id(“logout”);})?@KirilS。因为我想在文本框txtTimer上显示倒计时。我已经为web驱动程序设置了60秒超时。哦,那么你想让它异步运行吗?我认为您需要这样做:(即后台的selenium任务,前台的UI“等待”-等待和倒计时)
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;
    }