WPF线程安​​全和页面间通信

WPF thread safety and communication between pages

我是 C# 和 .Net 的新手,我对 WPF 线程安全以及不同 WPF 页面之间应该如何通信有一些疑问。我的主要项目将有一个名为 MainWindow.csMainWndow.xaml 的 class。此外,我将有两个页面名为 Page1.cs with Page1.xamlPage2.cs with Page2.xaml。看了文档,我知道每个WPF页面都有自己的线程,WPF的所有控件只能通过同一个线程访问,如果我在同一个页面有一个后台线程,我可以在后台访问WPF的控件通过以下示例

controlName.Dispatcher.Invoke(()=>updateControl())

我的问题是如果相同的操作,我想从 Page1.cs class 通过改变例如 MainWndow.xamlPage2.xaml 上的文本框。如何安全地完成这些操作?

Reading the documentation, I know that each WPF page has its own thread

这是不正确的,或者至少是误导性的。每个 WPF 控件都有一个拥有所述控件的线程,所有访问都必须从该线程完成。但在大多数情况下,它是拥有所有控件的同一个线程。所以不用担心线程安全。

可以有多个 windows 由不同的 UI 线程拥有,但很少推荐这样做,因为线程安全和同步的所有问题。

因此,除非您正在做一些不寻常的事情,否则您应该只需要关心您是在单个 UI 线程还是后台线程上进行的 运行 事情。

试着看看 INotifyPropertyChanged 如果你打算用 WPF 做一些项目,我还建议你看看 MVVM 模式