在我的UI中,我必须从三个服务中获取三组数据,然后在屏幕上显示三组数据。我希望UI能够在服务中的数据返回后立即更新,但是UI直到所有三个服务都返回后才更新?
简体
public async Task Refresh()
{
var a = await GetA();
observableCollectionA.AddRange(a);
RaisePropertyChanged(nameof(observableCollectionA ));
var b = await GetB();
observableCollectionB.AddRange(b);
RaisePropertyChanged(nameof(observableCollectionB ));
var c = await GetC();
observableCollectionC.AddRange(c);
RaisePropertyChanged(nameof(observableCollectionC ));
//Not until they all come back do I see the changes on the screen
}
答案 0 :(得分:1)
这似乎是您项目中的常见需求。我想您可以通过更可重用的方式获得相同的结果...
也许您应该尝试一下:
res = df.join(pd.DataFrame(df.pop('values').tolist()))\
.groupby('grp').sum().reset_index()
print(res)
grp 0 1 2 3 4
0 test 5 7 9 11 13
在此示例中,我具有以下“获取”方法:
public async Task Refresh()
{
await Task.WhenAll(
AddAndNotify(new ObservableCollection<object>(), GetA(), "CollectionA"),
AddAndNotify(new ObservableCollection<object>(), GetB(), "CollectionB"),
AddAndNotify(new ObservableCollection<object>(), GetC(), "CollectionC")
);
// Then, do something
}
public async Task AddAndNotify<T>(ObservableCollection<T> collection, Task<IEnumerable<object>> getElementsService, string propertyNameToNotifyChanged)
{
collection.AddRange(await Task.Run(() => getElementsService));
RaisePropertyChanged(propertyNameToNotifyChanged);
}
因此,这三个调用将“并行”进行。
希望对您有帮助。
答案 1 :(得分:0)
我发现通过在等待时将每个函数移入其自身的功能,可以使其工作:
await GetAAndUpdateUI();
await GetBAndUpdateUI();
await GetCAndUpdateUI();
答案 2 :(得分:0)
您还可以使用ConfigureAwait
GetA().ConfigureAwait(false);
GetB().ConfigureAwait(false);
GetC().ConfigureAwait(false);