我有这样的房产。
public double RollDegrees
{
get
{
return rollDegrees;
}
set
{
if (rollDegrees != value)
{
rollDegrees = value;
OnPropertyChanged(PROPERTY_NAME_ROLL_DEGREES);
}
}
它绑定到xaml控件,UI更新在正常条件下完美。 此属性在NON-UI线程上更新,但据我所知,将更新放在具有普通属性的Dispatcher.BeginInvoke上是不必要的。
但是当应用程序在UI线程上运行繁忙更新时(地图控件快速移动更新)此属性的UI绑定未更新,然后当繁忙更新完成后,属性再次更新UI。
但如果我把
Application.Current.Dispatcher.BeginInvoke((Action)(() =>
{
RollDegrees = (OperationEntity as Level).RollDegrees;
}));
然后UI完美无缺
为什么会发生这种情况的任何提示?也许在繁忙的更新?或者,当UI Dispatcher已满且忙碌时,这是正常行为吗?
答案 0 :(得分:0)
所有UI元素都应仅在UI线程中更新。每个线程都有自己的调度程序。如果您需要从非UI线程更新UI,则应调用Application.Current.Dispatcher.BeginInvoke()
。因此这是正常的行为。
在第一个场景中,您需要更新属性,但不能更新UI线程。因此,直到UI线程开始执行时才会出现延迟。当您使用Application.Current.Dispatcher.BeginInvoke()
时,会立即更新用户界面。
因此,如果您想从不同的线程反映与UI相关的一些更改,请使用Application.Current.Dispatcher.BeginInvoke()
。