У меня была такая же проблема. Форма с разделенным контейнером и веб-браузером. И не белый фон :-) Мерцание было невыносимым. В любом случае, я добился определенного успеха, применив подход программирования игр; установите таймер в вашей форме, пусть он вызывает метод обновления X раз в секунду. Метод обновления оценивает пару условий, которые определяют, должен ли веб-браузер быть видимым. Конечно, метод обновления должен быть скудным и означать:
private void OnPollForChanges(FormBrowseAllData inData)
{
webBrowser1.Visible = (mWebBrowserResizing == 0) &&
(!mWebBrowserLoading) &&
webBrowser1.ReadyState >= WebBrowserReadyState.Interactive;
if (mWebBrowserResizing>0)
{
mWebBrowserResizing--;
}
когда вы сами обнаруживаете изменение размера или принудительно изменяете его, вы просто скрываете браузер для обновлений X:
private void webBrowser1_Resize(object sender, EventArgs e)
{
mWebBrowserResizing = 5;
webBrowser1.Visible = false;
}
А когда вы делаете что-то, что может вызвать перезагрузку:
private void SetHTML(string inHTML)
{
webBrowser1.Visible = false;
mWebBrowserLoading = true;
webBrowser1.DocumentText = inHTML;
}
и
void OnWebBrowserDocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
mWebBrowserLoading = false;
}
Это уменьшает мерцание примерно до 5% от того, что было раньше. Конечно, это просто неудачные взломы, а не правильные решения.
PS: существует некоторое совпадение между использованием mWebBrowserLoading и проверкой webBrowser1.ReadyState. Потому что теоретически ReadyState должен меняться синхронно с mWebBrowserLoading, но в любом случае девизом здесь «лучше, чем потом сожалеть».