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
}