Инициализация документа веб-браузера и блокировка до завершения - PullRequest
1 голос
/ 25 ноября 2011

Я использую элемент управления webBrowser для отображения данных журнала в виде HTML в пользовательском элементе управления в форме на C #.По большей части я использую DOM через HtmlElement объекты и т. Д. Но когда я инициализирую элемент управления, я настраиваю некоторые стили, устанавливая свойство webBrowser.DocumentText.

Моя проблема заключается в том, что при использовании webBrowser.navigateили webBrowser.DocumentText эти действия, по-видимому, выполняются внутри другого потока в элементе управления webBrowser.Поэтому, когда я инициализирую свой элемент управления и пытаюсь немедленно добавить HtmlElements через DOM, он не работает, потому что документ еще не инициализирован.Я мог бы дождаться события documentComplete, но я оборачиваю все это в пользовательский элемент управления, и было бы плохим этикетом заставить кого-то подписаться на событие просто для того, чтобы убедиться, что элемент управления инициализирован.Однако доступ к веб-документу через DOM, похоже, блокирует текущий поток, что мне и нужно.

Вопросы:

  • Есть ли способ сообщить webBrowser о блокировке доон завершил инициализацию своего документа?
  • Есть ли способ инициализировать документ webBrowser исключительно через вызовы DOM?то есть, не используя webBrowser.navigate или webBrowser.DocumentText

РЕДАКТИРОВАТЬ Я пробовал это, это просто блокирует навсегда, я предполагаю, что для чего-то вроде этого вам понадобится несколько потоков?:

this.webBrowser.Navigate("about:blank");

while (this.webBrowser.ReadyState != WebBrowserReadyState.Complete)
{
    Thread.Sleep(100);
}

Ответы [ 2 ]

2 голосов
/ 03 сентября 2013

Мне кажется, это работает:

public void NavigateSynchronously(string url)
{
    this.WbrConfigurator.Navigate(url);

    while (this.WbrConfigurator.ReadyState != WebBrowserReadyState.Complete)
    {
        Application.DoEvents();
        Thread.Sleep(100);
    }
}

Полагаю, вам не хватает DoEvents.

0 голосов
/ 25 ноября 2011
var signal = new AutoResetEvent(false);

wb.DocumentCompleted += (o, args) => signal.Set();
Task.Factory.StartNew(() => wb.Navigate("about:blank"));

signal.WaitOne();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...