2017-06-12 1 views
-2

Ich versuche, Datei-Download eine Datei auf einmal zu beschränken, System.Windows.Forms.WebBrowser oder System.Windows.Controls.WebBrowser. Ich versuche, dies bei System.Windows.Forms.WebBrowser.FileDowload Ereignis zu fangen, kann aber nicht wissen, wenn die Datei vollständig heruntergeladen ist. Gibt es eine Möglichkeit zu fangen, wenn der Datei-Download bei Windows.Forms.WebBrowser oder Windows.Controls.WebBrowser abgeschlossen ist. Danke.Wie kann ich Dateidownloads mit WebBrowser drosseln?

void descargaCompleta(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     // When the download is complete 
     descargando = false; 
    } 

    void solo1Descarga (object sender, System.EventArgs e) 
    { 
     System.Windows.Forms.WebBrowser web = (System.Windows.Forms.WebBrowser)sender; 

     // Ask for Mutex 
     descargas.WaitOne(); 

     descargando = true; 

     while (descargando) 
      ; 

     descargas.ReleaseMutex(); 
    } 

    // Función que Modifica la GUI 
    private void UpadteTabs() 
    { 
     WindowsFormsHost contWeb = new WindowsFormsHost(); 
     System.Windows.Forms.WebBrowser nav = new System.Windows.Forms.WebBrowser(); 
     // I set the Events to WebBrowser 
     nav.FileDownload += new EventHandler (solo1Descarga); 
     nav.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler (descargaCompleta); 
    } 

Hinweis: „zu einem Zeitpunkt eine Datei herunterladen“ bedeutet, dass eine Download-Single zugleich sein kann. Zum Beispiel, wenn Sie eine Mega-Datei und ein Bild zum Download versuchen, 1 der Dateien muss auf die andere Oberfläche kann

+0

Bitte zeigen Sie uns einen Code, den Sie bisher versucht haben. –

+0

Dies sind die Ereignisse, die ich verwende. Ich verwende WPF, aber der Webbrowser stammt von System.Windows.Forms.WebBrowser. Der Grund ist, dass ich davon denke, dass ich die Downloads kontrollieren kann. Ich möchte wissen, wenn der Download abgeschlossen ist. https://gist.github.com/iraskato/ae5347a2e7c5c550c6091dfbcf5d37bb – Iraskato

+0

@Iraskato Was bedeutet "Datei einzeln herunterladen"? Gib * keinen neuen Download vor dem vorherigen aus. –

Antwort

0

Sie WebReponse Datei

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)); 
      } 
     } 
    } 
} 

Alternativly schreiben eine Weile zum Download verwenden warten Schleife zum Lesen der Binärdaten

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(); 
} 
Verwandte Themen