Wie, um Asynchrone Web-Anfragen in C# WPF
In meiner Anwendung habe ich ein WPF-Fenster, das eine DataGrid
in es. In Window_Loaded
Ereignis bekomme ich JSON-Daten vom server und nach dem Deserialisieren und die Umwandlung in einen List<T>
ich binden, dass meine Daten raster. Alles ist in Ordnung, auf diese Weise.
Das problem:
Aber der Antrag Teil des Codes braucht Zeit und die ganzen Fenster scheint, weiß mit keine Elemente geladen, einschließlich der Daten grid.Ich möchte, um eine Anfrage zu Teil asynchron genau wie in AJAX zeigen wir ein loader-Bild zwar etwas geladen wird und dann mit Hilfe einer callback-Funktion, die den Inhalt, wenn es geladen wird.
In Schritt für Schritt
- Laden der Fenster und Elemente der Daten-grid-buttons etc..
- Machen web-Anfrage an den server und zeigen Sie Daten geladen..' in einem label möglicherweise.
- Feuer ein Ereignis oder etwas, das Sie benachrichtigt, dass die Daten geladen hat und dann binden Sie die Daten-grid-Liste, so dass die Anwendung weiterhin reagiert und aktiv während der gesamten web-Anfrage Teil.
Hier ist die aktuelle nicht-async-code, den ich verwende im Window_Loaded event-handler
WebResponse response = req.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
string JSON = sr.ReadToEnd();
List<MyObject> returnedData = JsonConvert.DeserializeObject<List<MyObject>>(JSON);
fand ich diese link, aber ich bin nicht sicher, wie es anwendbar ist, zu meinem problem. Jede Hilfe oder Idee, wie man über diese, ist willkommen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden WebRequest.BeginGetResponse Statt GetResponse, und weisen Sie das serialisierte Ergebnis-Liste in der callback-Methode
Nicht vergessen, dass für die Zuordnung von Daten aus einem anderen thread auf das UI-element erstellt, in einem anderen thread, sollten Sie die Nachricht senden zu UI verwenden dispatcher
Hoffe, das hilft
Irgendeinem Grund Sie nicht mit der WebClient-Klasse? Haben Sie einen Blick auf die WebClient.DownloadStringAsync Methode.
Dieser code ist ein Beispiel-snippet von Silverlight, sollten die geltenden, in WPF als auch.