WPF线程安全和页面间通信
WPF thread safety and communication between pages
我是 C# 和 .Net 的新手,我对 WPF 线程安全以及不同 WPF 页面之间应该如何通信有一些疑问。我的主要项目将有一个名为 MainWindow.cs
和 MainWndow.xaml
的 class。此外,我将有两个页面名为 Page1.cs
with Page1.xaml
和 Page2.cs
with Page2.xaml
。看了文档,我知道每个WPF页面都有自己的线程,WPF的所有控件只能通过同一个线程访问,如果我在同一个页面有一个后台线程,我可以在后台访问WPF的控件通过以下示例
controlName.Dispatcher.Invoke(()=>updateControl())
我的问题是如果相同的操作,我想从 Page1.cs
class 通过改变例如
MainWndow.xaml
或 Page2.xaml
上的文本框。如何安全地完成这些操作?
Reading the documentation, I know that each WPF page has its own thread
这是不正确的,或者至少是误导性的。每个 WPF 控件都有一个拥有所述控件的线程,所有访问都必须从该线程完成。但在大多数情况下,它是拥有所有控件的同一个线程。所以不用担心线程安全。
可以有多个 windows 由不同的 UI 线程拥有,但很少推荐这样做,因为线程安全和同步的所有问题。
因此,除非您正在做一些不寻常的事情,否则您应该只需要关心您是在单个 UI 线程还是后台线程上进行的 运行 事情。
试着看看 INotifyPropertyChanged 如果你打算用 WPF 做一些项目,我还建议你看看 MVVM 模式
我是 C# 和 .Net 的新手,我对 WPF 线程安全以及不同 WPF 页面之间应该如何通信有一些疑问。我的主要项目将有一个名为 MainWindow.cs
和 MainWndow.xaml
的 class。此外,我将有两个页面名为 Page1.cs
with Page1.xaml
和 Page2.cs
with Page2.xaml
。看了文档,我知道每个WPF页面都有自己的线程,WPF的所有控件只能通过同一个线程访问,如果我在同一个页面有一个后台线程,我可以在后台访问WPF的控件通过以下示例
controlName.Dispatcher.Invoke(()=>updateControl())
我的问题是如果相同的操作,我想从 Page1.cs
class 通过改变例如
MainWndow.xaml
或 Page2.xaml
上的文本框。如何安全地完成这些操作?
Reading the documentation, I know that each WPF page has its own thread
这是不正确的,或者至少是误导性的。每个 WPF 控件都有一个拥有所述控件的线程,所有访问都必须从该线程完成。但在大多数情况下,它是拥有所有控件的同一个线程。所以不用担心线程安全。
可以有多个 windows 由不同的 UI 线程拥有,但很少推荐这样做,因为线程安全和同步的所有问题。
因此,除非您正在做一些不寻常的事情,否则您应该只需要关心您是在单个 UI 线程还是后台线程上进行的 运行 事情。
试着看看 INotifyPropertyChanged 如果你打算用 WPF 做一些项目,我还建议你看看 MVVM 模式