Назначить ProgressBar для загрузки страницы в веб-браузере

Я использую элемент управления WebBrowser для просмотра разных страниц (нажимая кнопки на самой форме, которые перемещают элемент управления WebBrowser на разные страницы). Когда он загружает страницу, я хочу, чтобы ProgressBar анимировался. Независимо от того, указывает ли это на самом деле прогресс, не имеет большого значения - я мог бы просто использовать стиль Marquee, чтобы анимировать его во время загрузки.

Вопрос в том, как сделать так, чтобы ProgressBar анимировался таким образом, когда страница загружается, и останавливался, когда страница загружалась?


person muttley91    schedule 30.10.2013    source источник


Ответы (1)


Взгляните на событие WebBrowser.ProgressChanged. . На странице MSDN говорится, что она очень «похожа на ту, что в Internet Explorer».

Фрагмент кода прямо оттуда:

private void WebBrowser1_ProgressChanged(Object sender, WebBrowserProgressChangedEventArgs e) {

    System.Text.StringBuilder messageBoxCS = new System.Text.StringBuilder();
    messageBoxCS.AppendFormat("{0} = {1}", "CurrentProgress", e.CurrentProgress );
    messageBoxCS.AppendLine();
    messageBoxCS.AppendFormat("{0} = {1}", "MaximumProgress", e.MaximumProgress );
    messageBoxCS.AppendLine();
    MessageBox.Show(messageBoxCS.ToString(), "ProgressChanged Event" );
}

e.CurrentProgress указывает, сколько байтов было загружено. до сих пор e.MaximumProgress указывает, сколько байт есть что скачать. Довольно легко получить процент прямо из этого, так что... вот так!

Я не буду рассказывать вам, как сделать индикатор выполнения (для этого существует ТОННА реализаций), но это должно вас заинтересовать.

Отвечает ли это на ваш вопрос?

person tnw    schedule 30.10.2013
comment
В некотором роде. Я просмотрел несколько реализаций индикатора выполнения, и большинство из них говорят, что нужно присвоить e.CurrentProgress значение progressBar.Value. Однако, поскольку он длинный, я должен привести его к типу int (что-то, чего я не вижу в примерах), а затем я получаю сообщение об ошибке (по мере того, как прогресс отображается как -1... ошибка приведения, я предполагаю). См. здесь пример: stackoverflow.com/questions/3386135/ - person muttley91; 31.10.2013
comment
@rar Я не думаю, что это совсем правильно, вам нужно установить progressBar.Maxiumum как e.MaximumProgress, иначе текущее значение индикатора выполнения не имеет ссылки. - person tnw; 31.10.2013
comment
Это также дает мне ошибку о том, что ее нужно привести к типу int. Я попробую это сейчас, когда у меня есть максимальный набор... РЕДАКТИРОВАТЬ: Нет, все еще получаю -1 как мой e.CurrentProgress - person muttley91; 31.10.2013