2017-06-12 7 views
-2

System.Windows.Forms.WebBrowserまたはSystem.Windows.Controls.WebBrowserを使用して、ファイルを一度にダウンロードすることを制限しようとしています。 System.Windows.Forms.WebBrowser.FileDowloadイベントでこれをキャッチしようとしましたが、ファイルが完全にダウンロードされた時期を知ることはできません。 Windows.Forms.WebBrowserまたはWindows.Controls.WebBrowserにファイルのダウンロードが完了したときに通知する方法はありますか。おかげさまで WebBrowserでファイルのダウンロードをどのように調整できますか?

注:「一度にファイルをダウンロードする」とは、ダウンロードする1つのファイルを同時にダウンロードすることを意味します。あなたはメガファイルや画像をダウンロードしようとしている場合たとえば、ファイルの1は他の仕上げを待つように を必要

+0

これまで試みてきたコードを表示してください。 –

+0

これは私が使用しているイベントです。 私はWPFを使用していますが、WebBrowserはSystem.Windows.Forms.WebBrowserです。 その理由は、私がダウンロードを制御できると思うからです。 ダウンロードが完了したら知りたい。 https://gist.github.com/iraskato/ae5347a2e7c5c550c6091dfbcf5d37bb – Iraskato

+0

@Iraskato「一度にファイルをダウンロードする」とはどういう意味ですか?前回の終了前に新しいダウンロードを発行しないでください。 –

答えて

0

あなたはAlternativlyしばらくの書き込みファイル

WebRequest request = WebRequest.Create(fileUri); 
WebResponse response = request.GetResponse(); 
DownLoadFile(response, response.ContentLength); 

private void DownLoadFile(HttpWebResponse response, long contentLength) 
{ 
    var respContentType = response.ContentType.ToUpper(); 
    using (var fileStream = File.OpenWrite(fileName)) 
    { 
     using (var responseStream = response.GetResponseStream()) 
     { 
      var buffer = new byte[1024]; 

      int bytesRead; 
      int offset = 0; 

      //Thread.Sleep(100); 
      while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) != 0) 
      { 
       fileStream.Write(buffer, 0, bytesRead); 
       offset += bytesRead; 
      } 

      if (offset != response.ContentLength) 
      { 
       //return string.Format("Only downloaded {0} of {1} bytes", offset, response.ContentLength)); 
       throw new ApplicationException(string.Format("Only downloaded {0} of {1} bytes", 
                offset, response.ContentLength)); 
      } 
     } 
    } 
} 

をダウンロードするWebReponseを使用することができますバイナリデータを読み取るためのループ

public void DownloadFile(Uri uri, string filePathToSave) 
{ 
    var downloadedData = webClient.DownloadData(uri); 
    while (downloadedData.Length == 0) 
    { 
     Thread.Sleep(2000); 
     downloadedData = webClient.DownloadData(uri); 
    } 
    Stream file = File.Open(filePathToSave, FileMode.Create); 
    file.Write(downloadedData, 0, downloadedData.Length); 
    file.Close(); 
} 
関連する問題