2011-06-20 3 views
1

В цикле foreach, как выполнить 2-й цикл после 5 секунд 1-го цикла, а затем выполнить 3-й цикл через 3 секунды второго цикла?Как выполнить следующий цикл после определенного времени?

первого цикл

после 5 второго

второго цикл

после 3 второго

третьего цикл

Поскольку я занимаюсь автоматизацией Webbrowser в окне формы, есть многочисленные ссылки, которую нужно щелкнуть автоматически, после щелчка ссылки она автоматически вставляет текст в текстовое поле и нажмите кнопку отправки. Процесс:

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 реализованы до перехода к следующему циклу.

+1

Почему вы жестко указываете такой номер вместо какого-то асинхронного подхода? – abatishchev

ответ

5
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(..) { } 
+1

Я думаю, он спрашивает, как сделать паузу во время каждой итерации, поэтому Thread.Sleep нужно будет помещать внутри каждого цикла и каким-то образом параметризовать. –

+0

@Nathan: Может быть. Но исходный вопрос четко задает вопрос о том, как сделать паузу между циклами. – abatishchev

+0

@abatischev, извините за мой плохой английский, натан прав. Кроме того, thread.sleep приостанавливает работу приложения без каких-либо действий? – DEN

2

Thread.Sleep метод блокирует текущий поток за указанное количество миллисекунд.

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

Я обновил свой вопрос, пожалуйста, посмотрите – DEN

0

Вы могли бы сделать

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++) 
{ 
.... 
} 

Но мне интересно, почему вы хотите, чтобы сделать такую ​​вещь.

+0

Я обновил свой вопрос, пожалуйста, посмотрите – DEN

Смежные вопросы