任务并行库 INotifyPropertyChanged 不抛出异常?

2024-02-25

我有一个 wpf 项目,我在绑定到文本框的属性上使用 INotifyPropertyChanged。我正在使用任务(TaskParallelLibrary)在不同的线程上更新此值。它已正确更新并且不会引发异常。我认为它会抛出异常,因为它是在后台线程而不是 UI 线程上运行。当然,如果我直接使用 UI 元素,它会抛出异常。那么,INotifyPropertyChanged 绑定机制是否负责自动分派到 UI 线程?

这是我的属性代码。

private string _textProperty = "";
    public string TextProperty
    {
        get
        {
            return _textProperty;
        }
        set
        {
            if (_textProperty != value)
            {
                _textProperty = value;
                NotifyPropertyChanged("TextProperty");
            }
        }
    }

我的任务创建是

var task = new Task(() =>
        {
            TextProperty = "ABCD"; // Works.
            // txtBox.Text = "ABCD"; // Throws an exception.
        });
        task.Start();

XAML 中的文本框是<TextBox Name="txtBox" Text="{Binding TextProperty}"/>


我认为它会抛出异常,因为它是在后台线程而不是 UI 线程上运行。

WPF 允许您在后台线程上设置绑定值。它将为您处理 UI 线程的封送处理。

但请注意,这确实not为集合的元素工作。如果您想添加到ObservableCollection<T>例如,这是绑定的,您必须封送回 UI 线程。有各种解决方法 http://kentb.blogspot.com/2008/01/cross-thread-collection-binding-in-wpf.html但是,如果需要的话,这可以缓解这种情况。注意此行为在 WPF 4.5 中发生变化 http://msdn.microsoft.com/en-us/library/bb613588%28v=vs.110%29.aspx#xthread_access,这将简化未来WPF中的多线程开发。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

任务并行库 INotifyPropertyChanged 不抛出异常? 的相关文章

随机推荐

  • 是否可以找到当前正在使用的 tmux 套接字?

    我正在尝试获取当前正在使用的 tmux 套接字列表 但到目前为止我想出的最佳解决方案是签入 tmp tmux 或 TMPDIR 据我所知 即使当前没有 tmux 会话正在使用这些套接字 tmux 也会将这些套接字保留一段时间 因此 我希望有
  • Django 表单未使用 ModelChoiceField 保存 -foreignkey

    我的网站上有多个表单 可以将信息保存到我的 PostgreSQL 数据库中 我正在尝试创建一个表单来保存我的设置模型的信息 class Set models Model settitle models CharField Title max
  • 没有在 DLL 项目中创建 WPF 窗口?

    Visual Studio 不允许我在 DLL 项目中创建 WPF 窗口是否有原因 我通过在应用程序项目中创建一个窗口并将其复制到我的 DLL 项目来 解决 这个问题 我还发现我可以创建一个 UserControl 并将基类更改为 Wind
  • 连接 Java 和 Python Flask

    我有一个简单的 Flask API from flask import Flask jsonify app Flask name app route def hello world return Hello World app route
  • 如何通过批处理文件执行cmd命令?

    我想编写一个批处理文件 它将按给定顺序执行以下操作 Open cmd 运行cmd命令cd c Program files IIS Express 运行cmd命令iisexpress path C FormsAdmin Site port 8
  • 在 Android 上隐藏 Toast

    我正在开发一个应用程序 它使用系统活动将联系人添加到手机内存中 此外部活动在保存联系人后启动 Toast 有没有可能摆脱它 如果我可以获得对它的引用来调用 cancel 或取消所有排队的 Toast 那就完美了 有Toast管理器吗 如果您
  • 将字体大小调整为绘图设备的大小

    我经常遇到必须调整输出图像大小的情况 不幸的是 这意味着通常我必须调整字体大小 以使内容可读 例如 如果下面的图 library ggplot2 library tibble library stringi set seed 1 df lt
  • django - 限制用户数量

    对不起我的英语不好 只有一个问题 是否有任何方法可以限制 Django 应用程序中可以创建的用户数量 我搜索了很多地方 只找到了这个 但我在仓库中看到最后一次更新是 3 年前https github com 1stvamp django l
  • 在 ASP.NET MVC 5 应用程序中启用 SSL 会导致 OpenIdConnectProtocolValidator 问题

    我有一个针对 Azure Active Directory 进行身份验证的 ASP NET MVC 5 应用程序 我想在整个应用程序上启用 SSL 因此利用全局过滤器如下 public class FilterConfig
  • 外键未存储在 Yii 中

    我有一个这样的数据库 Group id name Member id group id firstname lastname membersince Now as group id is foreign key then when I wi
  • 如何对 REST 视图类使用 @condition 装饰器

    我正在尝试使用 ETAG HTTP 标头发送 304 NOT MODIFIED 响应 使用以下代码 class MyView GenericAPIView serializer class MySerializer condition et
  • grails 将 svn 修订版添加到 app.version

    我正在尝试将 svn 修订版添加到我的app version不需要 ant 或其他类似的外部工具 看来我可以加入 Events groovy对此 但文档相对较少 有人知道怎么做吗 This http grails 1312388 n4 na
  • JApplet NoClassDefFoundError

    我正在 Eclipse 上编写 Japplet 它时不时地停止在 html 页面上工作 以下是错误 Exception in thread thread applet main MapGenerator class 1 java lang
  • 有没有一种简单的方法可以从 .NET 用户控件中删除“ct100”前缀?

    长话短说 几十个页面没有使用母版页 对于新模块 我创建了一个带有菜单控件的母版页 菜单控件已经存在 这样我就可以在我现在创建的大约六个页面上获得相同的外观 由于内容页使用母版页 因此菜单控件的名称更改为ct100 Menu1而不仅仅是Men
  • 使用 C# 编辑 DataGridview 并将其保存在数据库表中

    我使用 MYSQL Server 作为我的项目后端 我有一个 DataGridView 它填充了数据库中的数据 当我在 DataGridView 单元格中进行更改并单击保存按钮时 数据需要在 DataGridView 和数据库表中更改 这是
  • 新的CSS样式声明

    我正在尝试使用浏览器的内置类型CSSStyleDeclaration以编程方式传递和修改样式 这很方便 因为 cssText财产 然而 new CSSStyleDeclaration 抛出一个Illegal Constructor错误 所以
  • Gradle 以非零退出值 1 完成

    我刚刚在 libgdx 中生成了一个项目并导入到 eclipse 编译了一些依赖项 现在我得到了 Error Gradle Execution failed for task android compileDebugAidl com and
  • 如何选择自动完成下拉列表中的第一个元素

    如果没有元素 任何人都可以帮助我如何选择自动完成下拉列表的第一个元素 被选中 我尝试使用自动对焦 为键盘事件工作 如果我使用鼠标 第一个元素不会选择自动聚焦的元素 visit here https stackoverflow com a 9
  • 在 Swift 中使用 NSURL 读取文本文件

    我想读取并显示位于 URL 的文本文件的内容 我正在为 Yosemite 编写 Mac 应用程序 我需要使用 Swift 但我坚持这样做 这是我的代码 let messageURL NSURL string http localhost 8
  • 任务并行库 INotifyPropertyChanged 不抛出异常?

    我有一个 wpf 项目 我在绑定到文本框的属性上使用 INotifyPropertyChanged 我正在使用任务 TaskParallelLibrary 在不同的线程上更新此值 它已正确更新并且不会引发异常 我认为它会抛出异常 因为它是在