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