Как прокомментировал Томас В. - Я почти пропустил этот комментарий, но у меня были те же проблемы, поэтому я думаю, что стоит переписать его как ответ.
Основная проблема заключается в том, что после первого присвоения webBrowser1.DocumentText
некоторому html последующие присвоения не имели никакого эффекта.
Решение, на которое ссылается Томас, можно найти в подробностях по адресу http://weblogs.asp.net/gunnarpeipman/archive/2009/08/15/displaying-custom-html-in-webbrowser-control.aspx, однако я буду резюмировать ниже на случай, если эта страница станет недоступной в будущем.
Короче говоря, из-за того, как работает элемент управления webBrowser, вы должны переходить на новую страницу каждый раз, когда хотите изменить содержимое. Поэтому автор предлагает метод обновления элемента управления:
private void DisplayHtml(string html)
{
webBrowser1.Navigate("about:blank");
if (webBrowser1.Document != null)
{
webBrowser1.Document.Write(string.Empty);
}
webBrowser1.DocumentText = html;
}
Однако я обнаружил, что в моем текущем приложении я получаю исключение CastException из строки if(webBrowser1.Document != null)
. Я не уверен, почему это так, но я обнаружил, что если я обертываю весь блок if
в попытке поймать желаемый эффект все еще работает. См:
private void DisplayHtml(string html)
{
webBrowser1.Navigate("about:blank");
try
{
if (webBrowser1.Document != null)
{
webBrowser1.Document.Write(string.Empty);
}
}
catch (CastException e)
{ } // do nothing with this
webBrowser1.DocumentText = html;
}
Таким образом, каждый раз, когда выполняется функция DisplayHtml
, я получаю CastException
от оператора if
, поэтому содержимое оператора if никогда не достигается. Однако если я закомментирую оператор if
, чтобы не получить CastException
, то элемент управления браузера не будет обновлен. Я подозреваю, что есть другой побочный эффект кода за свойством Document, который вызывает этот эффект, несмотря на то, что он также вызывает исключение.
В любом случае, я надеюсь, что это поможет людям.