"必须在与DependencyObject相同的线程上创建DependencySource。"绑定背景时

时间:2014-09-24 09:03:29

标签: c# wpf multithreading backgroundworker

我想在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

异常。你能告诉我怎么解决吗?感谢。

2 个答案:

答案 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";
}));