Элемент управления 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(), который будет синхронно ждать окончания работы делегата.

Другие вопросы по тегам