如何使其异步运行
本文关键字:运行 异步 何使其 | 更新日期: 2023-09-27 18:36:14
我正在用 C# 编写一个 WPF 应用程序,我需要在其中查询 TFS 中的历史记录,并且我在列表视图中显示我返回的变更集列表。
列表视图 ItemsSource 绑定到一个名为"变更集"的 IEnumerable 属性,该属性在使用属性之前不会加载:
public IEnumerable<Changeset> Changesets
{
get
{
if (p_nChangesets == null)
{
p_nChangesets = TfsHelper.VCS.QueryHistory(Path, VersionSpec.Latest, 0,
RecursionType.Full, null,
new ChangesetVersionSpec(1),
VersionSpec.Latest, int.MaxValue,
false, true, false, false)
.OfType<Changeset>();
}
return p_nChangesets;
}
}
现在发生的情况是,当视图加载时,listview 绑定到此属性,因此它会立即调用该属性以获取变更集的集合。有时此查询运行缓慢,因此甚至需要一段时间才能看到窗口打开。我想要发生的是窗口立即显示,列表视图为空,直到找到变更集,然后填充列表视图。但我不知道该怎么做。我尝试使用任务,但结果相同:
public IEnumerable<Changeset> Changesets
{
get
{
if (p_nChangesets == null)
{
Task<IEnumerable> task = Task<IEnumerable>.Run(() => TfsHelper.VCS.QueryHistory(
Path, VersionSpec.Latest, 0,
RecursionType.Full, null,
new ChangesetVersionSpec(1),
VersionSpec.Latest, int.MaxValue,
false, true, false, false));
p_nChangesets = task.Result.OfType<Changeset>();
}
return p_nChangesets;
}
}
显然,我不知道我在做什么任务。有谁知道如何让它做我想做的事?
在
XAML 的绑定中添加IsAsync=True
:
<ListView ItemsSource="{Binding ChangeSets, IsAsync=True}"/>