你知道为什么我总是得到这个例外吗?
这是我的代码
private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
{
toolStripProgressBar1.Maximum = (int)e.MaximumProgress;
toolStripProgressBar1.Value = (int)e.CurrentProgress;
}
感谢您的回答,谢谢。
答案 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;
}
答案 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;
}