Hallo!
Also zuerst einmal, @IhopeonlyReader und @jaenicke: .NET, nicht Delphi
Nun zur Frage: Je nach verwendeter .NET-Version kann man das unterschiedlich schön lösen. In .NET 4.5 ist das sehr einfach:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| private async void button1_Click(object sender, EventArgs e) { var wc = new WebClient(); string data = await wc.DownloadStringTaskAsync("http://www.entwickler-ecke.de"); textBox1.Text = data; } |
Was hier im Hintergrund passiert: Durch das "async" in der Methodensignatur weiß der Compiler, dass wir eine asynchrone Methode erstellen wollen, also ein Methode in der, einfach gesagt, mit verschiedenen Threads gearbeitet werden soll. In Zeile 3 wird dann ganz normal (und noch im Hauptthread) eine Instanz des WebClients erstellt.
Zeile 4 enthält dann die wahre "Magie". Die Methode
DownloadStringTaskAsync gibt in Wahrheit keinen String, sondern einen Task<string> zurück und zwar direkt nach Aufruf. Dieser Task erledigt im Hintergrund (sprich: in einem anderen Thread) den Download. Irgendwann meldet sich der Task dann, dass er fertig ist. Durch das Schlüsselwort
await müssen wir uns aber nicht drum kümmern, auf irgendwelche Events des Tasks zu warten. Das macht der Compiler für uns! Wenn wir nämlich in Zeile 5 die Variable
data verwenden, ohne dass der Task schon fertig ist, wird dort drauf gewartet, dass er fertig wird. Aber dadurch wird der Hauptthread (und damit die GUI) nicht blockiert, sondern die Methode wird temporär verlassen und erst wieder fortgesetzt, wenn der Download fertig ist. Und das alles ohne unser Zutun, nur mit zwei kleinen Schlüsselwörtern
Wie sieht es mit "altem" .NET aus? So:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var wc = new WebClient(); wc.DownloadStringCompleted += delegate(object sender2, DownloadStringCompletedEventArgs e2) { textBox1.Text = e2.Result; };
wc.DownloadStringAsync(new Uri("http://www.entwickler-ecke.de")); |
Oder ist die Bearbeitung so lang, dass die auch in einen separaten Thread muss? Das kann man dann in .NET 4.5 auch sehr schick lösen
Grüße
Christian
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".