Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从后台线程更新绑定属性_C#_Wpf_Multithreading_Data Binding - Fatal编程技术网

C# 从后台线程更新绑定属性

C# 从后台线程更新绑定属性,c#,wpf,multithreading,data-binding,C#,Wpf,Multithreading,Data Binding,我有一个绑定到ViewModel中属性的WPF控件。令我惊讶的是(因为这看起来不像是WPF的一个广为人知的特性),从后台线程更改绑定属性似乎没有问题。我的UI更新没有例外。为什么会这样?从后台线程更新绑定属性时是否存在任何性能问题或任何其他限制?WPF会自动确保在主线程上更新绑定 没有任何表现上的成功。如果有的话,最好在后台线程上进行属性更新。将更新发送到主线程将增加在那里完成的工作量。您将同时更新视图和ViewModel,而不仅仅是视图。这种差异通常可以忽略不计,但如果大量更新快速发生,则可能

我有一个绑定到ViewModel中属性的WPF控件。令我惊讶的是(因为这看起来不像是WPF的一个广为人知的特性),从后台线程更改绑定属性似乎没有问题。我的UI更新没有例外。为什么会这样?从后台线程更新绑定属性时是否存在任何性能问题或任何其他限制?

WPF会自动确保在主线程上更新绑定


没有任何表现上的成功。如果有的话,最好在后台线程上进行属性更新。将更新发送到主线程将增加在那里完成的工作量。您将同时更新视图和ViewModel,而不仅仅是视图。这种差异通常可以忽略不计,但如果大量更新快速发生,则可能会导致UI的响应速度更快地降低。

这是因为
WPF
负责将绑定的数据编组到UI线程。 据我所知,这只适用于标量数据。对于集合,您必须注意在非UI线程和UI线程之间正确管理它

没有明显的开销,因为最后它应该做与多线程相同的事情(可能是以稍微优化的方式)

视情况而定

对于针对实现INotifyPropertyChanged的属性的绑定,它仅“自动”执行此操作(IIRC)。DependencyProperties和DependencyObjects具有线程关联性,如果您尝试从另一个线程更新它们,它们将抛出


绑定类有一个名为的属性,在某些特殊情况下,当从另一个线程更新属性时,该属性会有所帮助,以便更新不会阻塞UI。在您真正需要它之前,您并不需要它。

这就是为什么在可能的情况下,绑定比使用调度程序更受欢迎的原因之一。它可能是在主UI线程上调用Invoke来更改UI