在C#windows Phone 8.1

时间:2015-06-21 09:00:39

标签: c# windows-phone-8.1 queue async-await

我有一个图像列表视图。根据用户的关键词,列表被过滤并且精炼列表被添加为列表视图的源。一旦添加了源代码,我就会使用Async / Await方法从internet中下载listview中的图像。

这是我的问题:用户输入关键字后,会创建一个列表并创建异步调用。输入新关键字时,将替换另一个列表,并添加与前一个相同的新异步调用。当异步调用的数量增加时,UI存在相当大的滞后。

这就是我想要的。当添加第六个调用时,我需要创建一个大小为5的异步调用队列。它应该取消第一个异步调用并添加到队列中。

1 个答案:

答案 0 :(得分:0)

你不需要排队;由于每个关键字都替换了前一个关键字,因此您一次只需要进行一次下载。

这可以使用CancellationTokenSource来完成。这是一个示例方法:

private CancellationTokenSource _cts;
private async Task RefreshListAsync(string keyword)
{
  if (_cts != null)
    _cts.Cancel();
  _cts = new CancellationTokenSource();
  var result = await DownloadListAsync(keyword, _cts.Token);
  _cts.ThrowIfCancellationRequested();
  MyList = result;
}