1

なぜ私がいつもこの例外を受け取ったのか知っていますか? 例外

これは私のコードです

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

どんな答えでもいただければ幸いです、ありがとうございます。

4

5 に答える 5

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);
于 2012-08-06T11:20:00.290 に答える
1

-1(ロードされたバイト数またはダウンロードが完了したバイト数)を返しているように見えe.CurrentProgressます。条件ステートメントを使用して値が>-1であるかどうかを確認し、進行状況バーを更新することで、エラーの発生を防ぐことができます。

例えば:

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

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

于 2012-08-06T11:20:11.050 に答える
0

コーディングでは、currentprogress値をチェックせず、単にプログレスバーに割り当てるので、最小値未満の値も割り当てられます。だから、以下のようにしてください。

if((int)(e.CurrentProgress) > -1)
    toolStripProgressBar1.Value = (int)e.CurrentProgress; 
于 2012-08-06T11:19:29.193 に答える
0

あなたe.CurrentProgress-1。最小値は0です。

そのため、例外が発生します。

于 2012-08-06T11:19:42.400 に答える
0

ドキュメントによると、ダウンロードが完了する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;
    }
于 2012-08-06T11:21:57.010 に答える