从其他线程访问/更改UI元素属性

时间:2012-01-17 14:46:00

标签: c# wpf multithreading

  

可能重复:
  What is the use of a Dispatcher Object in WPF?

很抱歉问一下看起来是一个相当常见的问题,但我遇到了线程试图访问UI对象而失败的问题,因为“不同的线程拥有它们”。

我已经阅读过,并且有很多关于此的内容,但我一直无法找到任何有助于我的特定内容,而且我对线程和线程太新,无法理解答案并提取我需要的资源来自我找到的资源。

我目前的代码中包含的内容是:

    void Sc_OnDataSetFilled()
    {
        ddlSelectGraph.SelectedIndex = 0;

        this.DataContext = App.Sc.PepperOverview;
    }

这是一个事件处理程序,在成功填充DataSet时会在代码中的其他位置触发。完成此操作后,我希望SelectedIndex ComboBox的{​​{1}}更改,这是代码因为属于不同线程的UI元素而跳闸的地方。

当调试器尝试设置页面的ddlSelectGraph属性时会出现同样的问题,因为我之前谈到的DataContext也是另一个线程的一部分。

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

1 个答案:

答案 0 :(得分: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
                });