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

本文关键字:UI 元素 属性 更改 其他 线程 访问 | 更新日期: 2023-09-27 18:20:28

可能重复:
Dispatcher对象在WPF中有什么用途?

很抱歉问一个似乎很常见的问题,但我遇到了一个问题,线程试图访问UI对象,但由于"其他线程拥有它们"而失败。

我读过很多关于这方面的文章,但我一直找不到任何具体的东西来帮助我,而且我对线程和线程太陌生了,无法理解答案,也无法从我找到的来源中提取我需要的知识。

我现在的代码是这样的:

    void Sc_OnDataSetFilled()
    {
        ddlSelectGraph.SelectedIndex = 0;
        this.DataContext = App.Sc.PepperOverview;
    }

它是一个事件处理程序,当成功填充DataSet时,它会在代码的其他地方触发。完成此操作后,我希望ComboBox ddlSelectGraphSelectedIndex发生更改,因为UI元素属于不同的线程,所以代码会在此处中断。

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

有人能给我一些防白痴的建议吗?或者请给我一些建议?

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

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
                });