gpt4 book ai didi

c# - WPF 线程 : can I update a control's data context in a non-UI thread?

转载 作者:太空狗 更新时间:2023-10-29 21:55:46 27 4
gpt4 key购买 nike

我们可以在非 UI 线程中更新 WPF 控件的数据上下文吗?

假设我们有一个 LabelMyClass作为数据上下文,并绑定(bind) ContentMyProperty :

<Label Name="label" Content="{Binding MyProperty}" /> ,

哪里MyClass很简单:

public class MyClass : INotifyPropertyChanged
{
int _myField;
public int MyProperty
{
get
{
return _myField;
}
set
{
_myField = value;
PropertyChanged(this, new PropertyChangedEventArgs("MyProperty"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}

在非 UI 线程中,我们可以做 myClass.MyProperty = "updated"更新标签的内容,但我们不能做 label.Content = "updated"直接地。对吗?

我自己的回答:

这是我发现的:

最佳答案

是的,没错。集合还有其他注意事项(必须在 UI 线程中执行 CollectionChanged 事件)。

通常,您使用的是 ObservableCollection<T>用于绑定(bind)到集合。如果您从非 UI 线程更新此集合,代码将中断,因为事件是从执行它们的同一线程触发的(ObservableCollection<T> 在集合发生更改时触发事件)。为了避免这种情况,您必须向 ObservableCollection<T> 的自定义实现提供委托(delegate)。这会在 UI 线程中触发事件(使用 Dispatcher)。

关于c# - WPF 线程 : can I update a control's data context in a non-UI thread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4418767/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com