gpt4 book ai didi

multithreading - 从另一个线程WinRT中的ViewModel更新INotifyPropertyChanged-property

转载 作者:行者123 更新时间:2023-12-03 10:20:57 24 4
gpt4 key购买 nike

当我不再与互联网建立任何连接时,我拥有一个RaisePropertyChanged(PropName, oldValue, true, true)的属性,但它抛出一个异常,即我使用了错误的线程。
因此,我想从ViewModel中更新属性,但是如何在ViewModel中获取当前线程,或者您对解决方案有何建议?

我的ViewModel-ctor

public MyViewModel()
{
// START LISTENING TO NETWORKSTATUS
NetworkInformation.NetworkStatusChanged += OnNetworkStatusChangedHandler;
}

NetworkChanged-callback方法
   private async void OnNetworkStatusChangedHandler(object sender)
{
ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile();

if (profile == null)
{
IsRefreshEnabled = false;
}
else
{
IsRefreshEnabled = true;
}

}

我的属性(property)
public const string IsRefreshEnabledPropertyName = "IsRefreshEnabled";
private bool _isRefreshEnabled = true;
public bool IsRefreshEnabled
{
get { return _isRefreshEnabled; }

set
{
if (_isRefreshEnabled == value) { return; }

var oldValue = _isRefreshEnabled;
_isRefreshEnabled = value;
RaisePropertyChanged(IsRefreshEnabledPropertyName, oldValue, value, true);
}
}

提前致谢!

最佳答案

您需要将RaisePropertyChanged调用替换为:

await Dispatcher.RunAsync(DispatcherPriority.Normal, (){RaisePropertyChanged(IsRefreshEnabledPropertyName, oldValue, value, true)});  

这将导致对RaisePropertyChanged的调用在UI线程上运行。

我假设您的类派生自Xaml控件(以访问该控件上的Dispatcher属性)。

关于multithreading - 从另一个线程WinRT中的ViewModel更新INotifyPropertyChanged-property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11229685/

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