C# Xamarin.Forms HttpClient.GetAsync阻止UI线程

C# Xamarin.Forms HttpClient.GetAsync阻止UI线程,c#,xamarin.forms,async-await,C#,Xamarin.forms,Async Await,使用wait client.GetAsync(uri)会阻塞我的UI线程 以下是我的按钮单击事件处理程序中的代码: private async void Button_Clicked(object sender, EventArgs e) { var vm = new MainPageViewModel(); HttpClient client = new HttpClient(); client.MaxResponseContentBu

使用
wait client.GetAsync(uri)
会阻塞我的UI线程

以下是我的按钮单击事件处理程序中的代码:

private async void Button_Clicked(object sender, EventArgs e)
    {
        var vm = new MainPageViewModel();

        HttpClient client = new HttpClient();
        client.MaxResponseContentBufferSize = 256000;

        var uri = new Uri(string.Format("http://localhost:50715/api/values"));

        var response = await client.GetAsync(uri); // This is where UI gets blocked
        SongView.ItemsSource = new List<Song>();
        if (response.IsSuccessStatusCode)
        {
            var content = await response.Content.ReadAsStringAsync();
            vm.Songs = await Task.Factory.StartNew(() =>
            {
                return JsonConvert.DeserializeObject<List<Song>>(content);
            });
        }

        SongView.ItemsSource = vm.Songs;
    }

你能指出我做错了什么吗?

这真的只是代码吗?你收到了服务器的响应,却什么也没做?@Kharlan你能发布一个可复制的问题示例吗?提供的代码不会阻止UI线程。在第二个示例中,您是如何确定UI线程被阻塞的,您是否使用活动指示器?在代码中设置
MaxResponseContentBufferSize
的目的是什么,尤其是在第二个示例中?你能更具体地描述一下你看到的行为吗?@JSteward我正在本地机器上运行的UWP应用程序上调试。当我单击调用此事件处理程序的按钮时,在加载窗口时,我不会移动窗口。@Paulo Morgado我正在使用它将列表填充到ListView中。在我的第二个示例中,我只是指出调用
wait client.GetAsync(uri)
的行阻塞了UI@JSteward你说得对。我的代码不会阻止UI。我试着在android模拟器上调试它。我看到的冻结可能是由visual studio在本地计算机上调试UWP应用程序时引起的。
private async void Button_Clicked(object sender, EventArgs e)
    {
        HttpClient client = new HttpClient();
        client.MaxResponseContentBufferSize = 256000;

        var uri = new Uri(string.Format("http://localhost:50715/api/values"));

        var response = await client.GetAsync(uri); // This is where UI gets blocked
    }