PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C#] async webrequest



lrg0
01.04.2016, 20:03
Hallo,

ich möchte folgendes Consolen-Programm gerne in eine WPF-Anwendung ändern. Dazu möchte ich den Webrequest asynchron ausführen. Leider finde ich kein Tutorial, in dem mir leicht verständlich erklärt wird, wie es umschreiben muss. Ich bin gerade erst in c# eingestiegen und habe bis jetzt auch nichts asynchron programmiert. (Erfahrungen in anderen Sprachen sind vorhanden (Python, c, php))
Wer kann helfen?



using System;
using System.Net;


namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Requesting");


WebRequest r = null;
try
{
r = WebRequest.Create("https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe");
}
catch (UriFormatException e)
{
Console.WriteLine("Fehler: " + e.Message);
}


// Console.WriteLine("Content-Type: " + r?.GetResponse().ContentType);
Console.WriteLine("Length: " + r?.GetResponse().ContentLength);


Console.ReadLine();
}
}
}

hoschi111
01.04.2016, 22:14
private void btnDownload_Click(object sender, EventArgs e)
{
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChange d);
webClient.DownloadFileAsync(new Uri("http://mysite.com/myfile.txt"), @"c:\myfile.txt");
}

private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
}

private void Completed(object sender, AsyncCompletedEventArgs e)
{
MessageBox.Show("Download completed!");
}

lrg0
02.04.2016, 20:52
Danke für die Antwort.
Habe es etwas anders gelöst... ich habe in einem Buch bei google-books einen Ansatz gefunden in dem WebRequest.GetResponseAsync() verwendet wird.
Ich möchte die Datei, auf die der Link zeigt, nicht herunterladen sondern die Größe anzeigen.

Müsste es in deinem Code nicht private async void btnDownload_Click(object sender, EventArgs e) heißen damit das Fenster während der Verarbeitung nicht hängt?

hoschi111
02.04.2016, 20:59
Was geschieht, wenn der Webserver nicht die Größe der Datei mitteilt? (selten, aber soll vorkommen).

lrg0
02.04.2016, 21:41
Dann wird Größe -1 oder "" ausgegeben. Ich habe es geschrieben um zu entscheiden, ob ich einen Download über LTE-Hotspot beginne oder verschiebe, bis DSL verfügbar ist.