如何在 WPF 事件处理程序中使用异步调用
How to use async calls in WPF event handlers
我在带有异步调用的 WPF 中有这个事件处理程序。
private void Button_Click(object sender, RoutedEventArgs e)
{
var folderStructure = restApiProvider.GetFolderStructure();
}
下面是GetFolderStructure()
的实现:
public async Task<IList<string>> GetFolderStructure()
{
var request = new RestRequest(string.Empty, Method.Get);
var cancellationTokenSource = new CancellationTokenSource();
var response = await client.GetAsync(request, cancellationTokenSource.Token);
return JsonConvert.DeserializeObject<IList<string>>(response.Content);
}
我需要从 GetFolderStructure()
获取数据才能在应用程序中继续,但这是我得到的输出:
如果我添加 folderStructure.Wait();
,调用不会自行完成,整个应用程序会卡住。但是,如果我将 var folderStructure = restApiProvider.GetFolderStructure();
更改为 restApiProvider.GetFolderStructure();
,调用会立即完成并且不会发生卡住。
我错过了什么?
使调用方法异步并等待结果:
private async void Button_Click(object sender, RoutedEventArgs e)
{
var folderStructure = await restApiProvider.GetFolderStructure();
}
我在带有异步调用的 WPF 中有这个事件处理程序。
private void Button_Click(object sender, RoutedEventArgs e)
{
var folderStructure = restApiProvider.GetFolderStructure();
}
下面是GetFolderStructure()
的实现:
public async Task<IList<string>> GetFolderStructure()
{
var request = new RestRequest(string.Empty, Method.Get);
var cancellationTokenSource = new CancellationTokenSource();
var response = await client.GetAsync(request, cancellationTokenSource.Token);
return JsonConvert.DeserializeObject<IList<string>>(response.Content);
}
我需要从 GetFolderStructure()
获取数据才能在应用程序中继续,但这是我得到的输出:
如果我添加 folderStructure.Wait();
,调用不会自行完成,整个应用程序会卡住。但是,如果我将 var folderStructure = restApiProvider.GetFolderStructure();
更改为 restApiProvider.GetFolderStructure();
,调用会立即完成并且不会发生卡住。
我错过了什么?
使调用方法异步并等待结果:
private async void Button_Click(object sender, RoutedEventArgs e)
{
var folderStructure = await restApiProvider.GetFolderStructure();
}