Application.DoEvents (); будет делать все события, которые произошли до этого момента.
Например, после проверки каждого веб-сайта. do Application.DoEvents ();
с другой стороны, если вы просто хотите обновить свои списки, это будет listboxname.Refresh ();
оба эти варианта, однако, все равно будут зависать, пока веб-сайт проверяется, если вы не выполняете много из них, чего я не предлагаю.
оба метода также используют только один поток и очень линейны.
Наилучшим вариантом будет создание нового потока для выполнения тестов или использование фонового рабочего, который может выполнять тесты в отдельном потоке, чтобы события формы могли обрабатываться мгновенно без необходимости ждать.
Ручное управление другим потоком не должно быть слишком сложным.
вот пример.
using System.Threading;
public class MultiThreadingClass
{
private void FunctionForNewThread()
{
//do stuff
}
private void FunctionWithParameter(object param)
{
//Should do checks with typeof() on param before casting
int convertedparam = (int)param;
//do stuff
}
Thread t, t2;
static void Main()
{
ThreadStart ts = new ThreadStart(FunctionForNewThread);
t = new Thread(ts);
t.Start();
int x = 5;
ParameterizedThreadStart pts = new ParameterizedThreadStart(FunctionWithParameter);
t2 = new Thread(pts);
t2.Start(x);
}
}
здесь может быть важно отметить, что вы никогда не должны добавлять Thread как локальную переменную, которая исчезнет, так как вы можете действительно вернуть экземпляр потока, только выполнив Thread.CurrentThread в функции, которая была вызвана новым потоком. , но если этот поток уже заблокирован, у вас есть небольшая проблема:)
Чтобы легко обрабатывать потоки в глобальной переменной, либо создайте массив потоков, и вызовите Thread.Abort (); в каждом запущенном потоке, когда программа закрывается, или используйте класс ThreadPool в System.Threading.