Получаю список html-файлов с путями к ним и сохраняю их в List<string> и DataGridView:
string[] _files = Directory.GetFiles(delDir, _del);
foreach (string fl in _files)
{
myList.Add(new StringValue(fl));
}
myDataGridView.DataSource = myList;
На myDataGridView висит обработчик SelectionChanged, который получает имя файла из выделенной строки myDataGridView и передает его в объект WebBrowser с именем myWeb:
myWeb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(myWeb_DocumentCompleted_1);
myWeb.Navigate(new Uri(fileName));
Для объекта myWeb установлен обработчик DocumentCompleted.В его коде небольшой html-парсер:
HtmlDocument doc = myWeb.Document;
HtmlElementCollection tagCollection;
tagCollection = doc.GetElementsByTagName("div");
Затем из tagCollection я получаю нужные мне данные и сохраняю их в переменные string.
Т.е. получается схема: получаем путь и имя файла, сохраняем его в строку DataGrid, при выборе строки из DataGrid в WebBrowser загружается html-документ. Как только документ загрузился, срабатывает html-парсер, сохраняющий нужный мне текст или теги.
Но все это работает только если я сам выбираю строки, вручную. Попытался сделать чтобы строки выбирались сами таким образом:
foreach(DataGridViewRow row in myDataGridView.Rows)
{
row.Selected = true;
}
Строки выбираются, но парсер не срабатывает, поскольку WebBrowser.DocumentCompleted попросту не работает. Или не успевает отработать. Есть ли выход из ситуации?
После выбора каждой строки нужно дожидаться пока WebBrowser загрузит и отработает страницу.
Для этого можно отслеживать событие DocumentCompleted у браузера.
//флаг для отслеживания
private bool isCompleted;
void myWeb_DocumentCompleted_1(object sender, WebBrowserDocumentCompletedEventArgs e)
{
//обработка страницы
//...
//после обработки устанавливаем флаг
isCompleted = true;
}
//цикл обработки
foreach (DataGridViewRow row in myDataGridView.Rows)
{
isCompleted = false;
row.Selected = true;
//дожидаемся завершения обработки
while (!isCompleted)
{
Application.DoEvents();
}
}
Также из кода неясно зачем при выборе каждой строки привязывать новый обработчик к DocumentCompleted. Достаточно одного глобального.
И если задача в данном случае состоит именно в разборе HTML файлов, то, возможно, будет проще использовать html-парсер (например, Html Agility Pack) вместо WebBrowser. Так можно будет грузить страницы напрямую из файлов без визуального компонента.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники