我想在Backgroundworker中更改数据网格的标签和背景。 我有这样的网格:
<Grid HorizontalAlignment="Center" Height="499" Margin="96,170,810,0" VerticalAlignment="Top" Width="486" Background="{Binding aBackGround}">
<Label Content="212" FontSize="100" HorizontalAlignment="Left" VerticalAlignment="Top" RenderTransformOrigin="-4.395,-11.154" Margin="173,22,0,0" Height="123" Width="178"/>
<Label Content="{Binding aPace}" FontSize="65" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="23,202,0,0" Height="84" Width="255"/>
</Grid>
在后面的代码中我有aBackGround和aPace这样:
private Brush _aBackGround;
private string _apace;
public Brush aBackGround
{
get { return _aBackGround; }
set
{
_aBackGround= value;
RaisePropertyChanged(() => this.aBackGround);
}
}
public string aPace
{
get { return _apace; }
set
{
_apace = value;
RaisePropertyChanged(() => this.aPace);
}
}
我可以正确看到aPace的结果但是后来我得到了
必须在与DependencyObject相同的线程上创建DependencySource
异常。你能告诉我怎么解决吗?感谢。
答案 0 :(得分:2)
无论直接访问UI的代码是什么,您都只能在UI线程上运行。 使用调度程序在那里运行它,例如:
Application.Current.Dispatcher.Invoke(() =>
{
// the code that's accessing UI properties
});
答案 1 :(得分:1)
将您的值赋值移至backgroundworker completed事件
或
在backgroundWorker中分配值时使用调用
this.Invoke(new Action(() =>
{
this.aPace = "test";
}));