2012-01-17 62 views
-1

可能重复:
What is the use of a Dispatcher Object in WPF?访问/从不同的线程更改UI元素属性

不好意思问这似乎是一个相当普遍的问题,但我有一个问题线程试图访问UI对象并失败,因为“一个不同的线程拥有它们”。

我已经阅读过,有很多这方面,但我一直无法找到任何具体的帮助我,我太新来的线程和线程能够理解答案和提取我从我找到的来源获得的知识。

我在我此刻的代码是这样的:

void Sc_OnDataSetFilled() 
    { 
     ddlSelectGraph.SelectedIndex = 0; 

     this.DataContext = App.Sc.PepperOverview; 
    } 

这是一个事件处理程序,这是在代码的其他地方引发成功填充的DataSet时。完成此操作后,我希望ComboBoxddlSelectGraphSelectedIndex发生更改,这是由于UI元素属于不同的线程而导致代码绊倒的位置。

当调试器尝试设置页面的DataContext属性时,会出现同样的问题,因为前面提到的DataSource也是其他线程的一部分。

有人可以给我一些白痴证明的建议,或者指向我一些请吗?

+0

您使用Dispatcher将调用封送到UI线程。每个线程都有自己的Dispatcher,所以你必须得到一个属于UI线程的引用。当涉及到多线程时,没有“白痴证明”的建议。除了“不这样做”,就是这样。 – Will 2012-01-17 14:49:46

回答

2
this.Dispatcher.Invoke(new Action<object>((context) => 
       { 
        this.DataContext = context; // your implementation goes here 
       }), 
       new object[1] 
       { 
        "you object" // the object(s) you'd like to pass in 
       });