Я хочу прокрутить список URL-адресов и проверить каждый URL-адрес, если веб-сайт не работает или не использует несколько потоков.Прокрутите список и создайте многопоточные потоки
Мой подход:
while (_lURLs.Count > 0)
{
while (_iRunningThreads < _iNumThreads)
{
Thread t = new Thread(new ParameterizedThreadStart(CheckWebsite));
string strUrl = GetNextURL();
if (!string.IsNullOrEmpty(strUrl))
{
t.Start(strUrl);
_iRunningThreads++;
}
else
{
break;
}
}
}
private string GetNextURL()
{
lock (_lURLs)
{
if (_lURLs.Count > 0)
{
string strRetVal = _lURLs[0];
_lURLs.RemoveAt(0);
return strRetVal;
}
else
{
return string.Empty;
}
}
}
Когда поток закончил _iRunningThreads
свойство получает убавления.
Моя проблема: внешняя петля блокирует все «while (_lURLs.Count > 0)
». Добавление Application.DoEvents()
во внешний цикл while помогает, но я хочу использовать код в библиотеке C#, где Application.DoEvents()
недоступен.
Благодарим за помощь.
Эта операция снаружи, блокирующий op. Просто запустите его на Thread (Backgroundworker) из основной программы. –
Каков ваш метод CheckWebsite на самом деле? Кажется, что асинхронные методы были бы более подходящими, чем потоки для этого типа задач. –
см. Http://stackoverflow.com/questions/15850633/c-sharp-threading-issue-best-practises – Filip