私は奇妙なWebClient.UploadFileAsync()の動作について助けが必要です。 ファイルをリモートHTTPサーバ(nginx)のPOSTメソッドにアップロードしています。 POSTはPHPスクリプト(Addressが参照する)を介して処理されます。WebClient UploadFileAsync進行中の異常な動作の報告
私はこの単純なコード
public void uploadFile(string filePath)
{
webClient = new WebClient();
webClient.Credentials = new NetworkCredential(Constant.HTTPUsername,Constant.HTTPPassword);
webClient.Headers.Add("Test", TestKey);
webClient.UploadProgressChanged += webClient_UploadProgressChanged;
webClient.UploadFileCompleted += webClient_UploadFileCompleted;
try
{
webClient.UploadFileAsync(new Uri(Address), "POST", filePath);
}
catch (Exception error)
{
throw new CustomException(error.Message);
}
}
そしてUploadProgressChangedに、私は単に与えられたProgressPercentageとプログレスバーを更新しています。 最初の問題は、任意のファイルサイズがあると進捗率は、報告されたということです。だから、
[17.38.14] Progress: 0 Bytes Sent: 175/269264
[17.38.14] Progress: 1 Bytes Sent: 8367/269264
[17.38.14] Progress: 3 Bytes Sent: 16559/269264
[17.38.14] Progress: 4 Bytes Sent: 24751/269264
[17.38.14] Progress: 6 Bytes Sent: 32943/269264
[17.38.14] Progress: 7 Bytes Sent: 41135/269264
[17.38.14] Progress: 9 Bytes Sent: 49327/269264
[17.38.14] Progress: 10 Bytes Sent: 57519/269264
[17.38.14] Progress: 12 Bytes Sent: 65711/269264
[17.38.14] Progress: 13 Bytes Sent: 73903/269264
[17.38.14] Progress: 15 Bytes Sent: 82095/269264
[17.38.14] Progress: 16 Bytes Sent: 90287/269264
[17.38.14] Progress: 18 Bytes Sent: 98479/269264
[17.38.15] Progress: 19 Bytes Sent: 106671/269264
[17.38.15] Progress: 21 Bytes Sent: 114863/269264
[17.38.15] Progress: 22 Bytes Sent: 123055/269264
[17.38.15] Progress: 24 Bytes Sent: 131247/269264
[17.38.15] Progress: 25 Bytes Sent: 139439/269264
[17.38.15] Progress: 27 Bytes Sent: 147631/269264
[17.38.16] Progress: 28 Bytes Sent: 155823/269264
[17.38.16] Progress: 30 Bytes Sent: 164015/269264
[17.38.16] Progress: 31 Bytes Sent: 172207/269264
[17.38.16] Progress: 33 Bytes Sent: 180399/269264
[17.38.16] Progress: 35 Bytes Sent: 188591/269264
[17.38.16] Progress: 36 Bytes Sent: 196783/269264
[17.38.17] Progress: 38 Bytes Sent: 204975/269264
[17.38.17] Progress: 39 Bytes Sent: 213167/269264
[17.38.17] Progress: 41 Bytes Sent: 221359/269264
[17.38.17] Progress: 42 Bytes Sent: 229551/269264
[17.38.17] Progress: 44 Bytes Sent: 237743/269264
[17.38.17] Progress: 45 Bytes Sent: 245935/269264
[17.38.17] Progress: 47 Bytes Sent: 254127/269264
[17.38.18] Progress: 48 Bytes Sent: 262319/269264
[17.38.18] Progress: 49 Bytes Sent: 269220/269264
[17.38.18] Progress: 50 Bytes Sent: 269264/269264
[17.38.25] Progress: -50 Bytes Sent: 269264/269264
[17.38.25] Progress: 100 Bytes Sent: 269264/269264
[17.38.25] FileCompleted event raised!
、ウェブ上で検索、私は、50〜> 100からのジャンプは、中だけで設計上の選択であることを発見しました%のレポート..そしてそれで私はそれでいいです。 奇妙な問題は、ファイル全体が送信されたときの50%であっても、ネットワークインターフェイスがまだトラフィックを生成し、依然としてアップロードしているということです。 実際には、上記のログの時間からわかるように、UploadFileCompletedEventを発生させるためにファイルが送信されてから7秒かかります。ただし、HTTPでファイルを送信しています。
ここでの問題は、UIが確実に更新できないことです。プログレスバーが50%まで拡大しますが、アップロードの完了を待っていることになります(これは大きなファイルでは有意に)。
質問は次のとおりです。どのようにすれば、ファイルのアップロードの進捗状況を確実にユーザーに更新させることができますか?
ありがとうございました。
P.S.メソッドは完全に正常に動作し、ファイルはリモートサーバーに正しくアップロードされます。唯一の問題は進捗報告です。
解決策として答えを投稿して受け入れても問題ない場合は、 –
時にはここに質問を投稿することもあなたがそれを理解するのを助けます:) –