【问题标题】:How to execute next loop after specific time?如何在特定时间后执行下一个循环?
【发布时间】:2011-06-20 06:19:25
【问题描述】:

在foreach循环中,如何在第1个循环5秒后执行第2个循环,然后在第2个循环3秒后执行第3个循环?

第一个循环

5 秒后

第二次循环

3 秒后

第三次循环

当我在 Windows 窗体中进行 Web 浏览器自动化时, 有很多链接要自动点击,点击链接后,它会自动在文本框中插入文本并点击提交按钮。 过程:

foreach (HtmlElement ahref in ahrefs)
{
    ahref.InvokeMember("click");

    Application.DoEvents();

    txtboxPrice.SetAttribute("value", "100");

    btnSubmit.InvokeMember("click");
 }

我现在面临的问题是,循环太快,直到Webbrowser无法完成txtboxprice.setattribute和btnsubmit.invokemember的实现,它已经点击了下一个循环的ahref。

因此,我需要触发时间控制,以确保 txtboxprice.setattribute 和 btnsubmit.invokemember 在进行下一个循环之前实现。

【问题讨论】:

  • 为什么要硬编码这样的数字而不是某种异步方法?

标签: c# .net winforms webbrowser-control


【解决方案1】:
using System.Threading;

foreach(..) { } // your for or foreach or any code you want

Thread.Sleep(5000); // pause the current thread on x milliseconds

foreach(..) { }

Thread.Sleep(3000);

foreach(..) { }

【讨论】:

  • 我认为他在问如何在每次迭代期间暂停,因此 Thread.Sleep 需要放置在 for each 循环中并参数化一些方式。
  • @Nathan:也许吧。但最初的问题清楚地询问如何在循环之间暂停。
  • @abatischev,对不起我的英语不好,内森是对的。此外,thread.sleep 是否会暂停应用程序而不做任何事情?
【解决方案2】:

Thread.Sleep 方法阻塞当前线程指定的毫秒数。

for (int i = 0; i < 5; i++)
{
        Console.WriteLine("Sleep for 2 seconds.");
        Thread.Sleep(2000);
}

【讨论】:

    【解决方案3】:

    你可以的

    for(int i=0;i<number_of_times;i++)
    {
    ....
        if(i == number_of_times - 1)
           Thread.Sleep(5000);//time in millsecond, namespace System.Threading
    }
    
    for(int i=0;i<number_of_times;i++)
    {
    ....
        if(i == number_of_times - 1)
           Thread.Sleep(3000);
    }
    
    for(int i=0;i<number_of_times;i++)
    {
    ....
    }
    

    但我想知道你为什么要做这样的事情。

    【讨论】:

      猜你喜欢
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多