WPF线程安全和页面之间的通信
Posted
技术标签:
【中文标题】WPF线程安全和页面之间的通信【英文标题】:WPF thread safety and communication between pages 【发布时间】:2022-01-20 04:46:34 【问题描述】:我是 C# 和 .Net 的新手,我对 WPF 线程安全以及不同的 WPF 页面应该如何相互通信有一些疑问。我的主要项目将有一个名为MainWindow.cs
和MainWndow.xaml
的类。此外,我将有两个页面称为Page1.cs
和Page1.xaml
和Page2.cs
和Page2.xaml
。阅读文档,我知道每个 WPF 页面都有自己的线程,并且 WPF 的所有控件只能通过同一个线程访问,如果我在同一页面中有一个后台线程,我可以在后台访问 WPF 的控件遍历下面的例子
controlName.Dispatcher.Invoke(()=>updateControl())
我的问题是如果同样的操作,我想从Page1.cs
类做改变例如
MainWndow.xaml
或 Page2.xaml
上的文本框。如何安全地完成这些操作?
【问题讨论】:
【参考方案1】:阅读文档,我知道每个 WPF 页面都有自己的线程
这是不正确的,或者至少是误导性的。每个 WPF 控件都有一个拥有所述控件的线程,并且所有访问都必须从该线程完成。但在大多数情况下,拥有所有控件的是同一个线程。所以不用担心线程安全。
可以有多个窗口由不同的 UI 线程拥有,但很少推荐这样做,因为线程安全和同步的所有问题。
因此,除非您正在做一些不常见的事情,否则您只需要关心您是在单个 UI 线程还是在后台线程上运行。
【讨论】:
【参考方案2】:尝试查看INotifyPropertyChanged,如果您打算使用 WPF 做一些项目,我还建议您查看 MVVM Pattern
【讨论】:
以上是关于WPF线程安全和页面之间的通信的主要内容,如果未能解决你的问题,请参考以下文章