Llamando al servicio web de forma asíncrona en la página del constructor.

Necesito cargar datos en una página XAML en una aplicación UWP de Windows 10. Para eso escribí un código para llamar al servicio web en función de tarea asíncrona, y lo llamo en el constructor de páginas. ¿Podría por favor decir la mejor manera de hacer esto? A continuación es mi código.

public sealed partial class MyDownloads : Page { string result; public MyDownloads() { this.InitializeComponent(); GetDownloads().Wait(); string jsonstring = result; //code for binding follows } private async Task GetDownloads() { JsonObject jsonObject = new JsonObject { {"StudentID", JsonValue.CreateStringValue(user.Student_Id.ToString()) }, }; string ServiceURI = "http://m.xxx.com/xxxx.svc/GetDownloadedNotes"; HttpClient httpClient = new HttpClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, ServiceURI); request.Content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json"); HttpResponseMessage response = await httpClient.SendAsync(request); string returnString = await response.Content.ReadAsStringAsync(); result = returnString; } } 

En lugar de eso necesitas usar OnNavigatedTo

porque, GetDownloads().Wait() mala práctica. Bloqueas el hilo de UI hasta el final de la ejecución.

 public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } protected override async void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); var result = await GetDownloadsAsync(); string jsonstring = result; } private async Task GetDownloadsAsync() { JsonObject jsonObject = new JsonObject { {"StudentID", JsonValue.CreateStringValue(user.Student_Id.ToString()) }, }; string ServiceURI = "http://m.xxx.com/xxxx.svc/GetDownloadedNotes"; HttpClient httpClient = new HttpClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, ServiceURI); request.Content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json"); HttpResponseMessage response = await httpClient.SendAsync(request); string returnString = await response.Content.ReadAsStringAsync(); return returnString; } }