Элемент управления WebBrowser получает все элементы управления в потоке не работает
У меня есть элемент управления WebBrowser, и я вызываю функцию, чтобы получить весь идентификатор элемента управления из потока. функции работают, когда я вызываю его из потока пользовательского интерфейса, но не получает никакого контроля, если вызывается из отдельного потока.
Я потерян, пожалуйста, помогите
призвание:
List<WebOparator.WebOparator.WebControls> wcList = oparator.GetAllControlName();
int tryCount = 0;
do
{
if (wcList.Count == 0)
{
tryCount++;
Thread.Sleep(2000);
wcList = oparator.GetAllControlName();
}
if (tryCount >= 5) break;
} while (wcList.Count == 0);
Метод:
public List<WebControls> GetAllControlName()
{
List<WebControls> names = new List<WebControls>();
if (this.InvokeRequired)
{
this.BeginInvoke((MethodInvoker)delegate
{
int i = 0;
foreach (HtmlElement element in myBrowser1.Document.All)
{
if (element.Id != null)
{
i++;
names.Add(new WebControls() { sl = i, ID = element.Id, TagName = element.TagName });
}
}
});
}
else
{
int i = 0;
foreach (HtmlElement element in myBrowser1.Document.All)
{
if (element.Id != null)
{
i++;
names.Add(new WebControls() { sl = i, ID = element.Id, TagName = element.TagName });
}
}
}
return names;
}
Редактировать:
Я обнаружил, что функция зацикливается на всех элементах управления и добавляет их в список, но возвращает пустой список....
1 ответ
Решение
BeginInvoke()
асинхронный
Этот делегат yuns в потоке пользовательского интерфейса после завершения остальной части вашего кода.
Ты хочешь Invoke()
, который будет синхронно ждать окончания работы делегата.