使用webBrowser进度更改时始终出现异常

时间:2012-08-06 11:15:18

标签: c#

你知道为什么我总是得到这个例外吗? exception

这是我的代码

private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
    {
        toolStripProgressBar1.Maximum = (int)e.MaximumProgress;
        toolStripProgressBar1.Value = (int)e.CurrentProgress;
    }

感谢您的回答,谢谢。

5 个答案:

答案 0 :(得分:2)

根据msdn

  

已加载的字节数或-1表示下载已完成。

并且-1值不是有效的进度值。并且它表示下载已完成,因此显示进度条毫无意义。我认为这个州是隐藏进度窗口的好地方。

在您的代码中,您将表单long转换为int,这会在您下载大小超过2,147,483,647字节(int.MaxValue)的文件时导致类似的异常。你应该分配

toolStripProgressBar1.Maximum = 100;

并在事件中

toolStripProgressBar1.Value = (int)Math.Floor((e.CurrentProgress / (double)e.MaximumProgress) * 100);

答案 1 :(得分:1)

看起来好像e.CurrentProgress正在返回-1(已加载或下载已完成的字节数)。您可以通过使用条件语句来检查值是否为>来停止发生错误。 -1,如果是,则更新进度条。

例如:

if ((int)e.CurrentProgress > -1) {
    toolStripProgressBar1.Value = (int)e.CurrentProgress;
}

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowserprogresschangedeventargs.currentprogress.aspx

答案 2 :(得分:0)

在编码中,您没有检查当前进度值,只是将其分配给进度条,因此也为其分配了小于最小值的值。所以,就像下面这样。

if((int)(e.CurrentProgress) > -1)
    toolStripProgressBar1.Value = (int)e.CurrentProgress; 

答案 3 :(得分:0)

您的e.CurrentProgress-1。您的最低价格为0

这就是你捕捉异常的原因。

答案 4 :(得分:0)

根据documentation - 事件参数类CurrentProgress的属性WebBrowserProgressChangedEventArgs在下载完成时的值为-1。

请使用以下代码确保进度条完全反映下载状态:

    private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
    {
        toolStripProgressBar1.Maximum = (int)e.MaximumProgress;
        toolStripProgressBar1.Value = ((int)e.CurrentProgress < 0 || (int)e.MaximumProgress < (int)e.CurrentProgress) ? (int)e.MaximumProgress : (int)e.CurrentProgress;
    }