【问题标题】:WPF thread safety and communication between pagesWPF线程安​​全和页面之间的通信
【发布时间】:2022-01-20 04:46:34
【问题描述】:

我是 C# 和 .Net 的新手,我对 WPF 线程安全以及不同的 WPF 页面应该如何相互通信有一些疑问。我的主要项目将有一个名为MainWindow.csMainWndow.xaml 的类。此外,我将有两个页面称为Page1.csPage1.xamlPage2.csPage2.xaml。阅读文档,我知道每个 WPF 页面都有自己的线程,并且 WPF 的所有控件只能通过同一个线程访问,如果我在同一页面中有一个后台线程,我可以在后台访问 WPF 的控件遍历下面的例子

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

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

【问题讨论】:

    标签: c# .net wpf thread-safety


    【解决方案1】:

    阅读文档,我知道每个 WPF 页面都有自己的线程

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

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

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

    【讨论】:

      【解决方案2】:

      尝试查看INotifyPropertyChanged,如果您打算使用 WPF 做一些项目,我还建议您查看 MVVM Pattern

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多