gpt4 book ai didi

c# - 多个异步调用的忙碌指示器

转载 作者:太空宇宙 更新时间:2023-11-03 11:04:32 25 4
gpt4 key购买 nike

我有一个 Busy 属性,它在进行异步调用之前设置为 true,然后在完成时设置为 false。现在我有 2 个异步调用,我该如何处理这个逻辑?我是否需要锁定变量或我需要注意的其他一些并行问题?

private bool _busy;

public bool Busy
{
get { return _busy; }
set
{
bool changed = value != _busy;
_busy = value;
if (changed) RaisePropertyChanged("Busy");
}
}

private void loadUser(int userId)
{
Busy = true;
api.GetUser(userId, CancellationToken.None).ContinueWith(t =>
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
Busy = false;
}));

}

private void loadOtherData(int dataId)
{
Busy = true;
api.GetData(dataId, CancellationToken.None).ContinueWith(t =>
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
Busy = false;
}));

}

我知道这个逻辑是有缺陷的,因为 Busy 属性在第一个完成执行的方法上设置为 false。我的一个想法是再使用 2 个字段; isUserLoadingisOtherDataLoading 并在将 Busy 设置为 false 之前确保两者均为 false。

我想知道是否有更好的方法来完成此任务。

最佳答案

如果您有两个 bool 值,_isUserLoading_isOtherDataLoading,您在加载方法中更新了它们,那么您只需将 Busy 更改为此:

public bool busy
{
get
{
return _isUserLoading || _isOtherDataLoading;
}
}

包含调用 RaisePropertyChanged 的​​另一个版本可以像这样工作:

public bool busy
{
get
{
return _isUserLoading || _isOtherDataLoading;
}
}

public bool IsUserLoading
{
get
{
return _isUserLoading;
}
set
{
bool busy = Busy;
_isUserLoading = value;
if (busy != Busy) RaisePropertyChanged("Busy");
}
}

当然还有 IsOtherDataLoading 的类似属性。

关于c# - 多个异步调用的忙碌指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16409372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com