允许两个线程同时编辑同一对象的不同属性是否安全?

2023-12-31

我正在编写一个编目应用程序,它解析文件并从中提取信息,并将每个文件的信息存储在对象实例中。除了从文件中提取的数据之外,对象还具有其他元数据属性(作者、标签、注释等),这些属性随后存储在单独的 XML 文件中。

从文件中提取数据是一个耗时的过程,因此我让它在单独的线程上运行。从文件中提取的属性将仅来自文件,因此具有 [ReadOnly] 属性以防止用户编辑它们。另一方面,元数据属性仅由用户填充,因此不是只读的。我允许用户通过 PropertyGrid 查看/编辑这些对象。

因此,如果提取过程在填充对象的文件属性的一个线程上运行,那么让用户同时编辑元数据属性是否存在危险?我正在尝试决定是否应该使用模态界面来阻止用户在提取完成/取消之前执行任何操作,或者使用非模态界面来允许他们在提取运行时继续工作。


具体针对您的问题:不,没有问题。

您应该注意的是,后台线程写入的属性在写入时不会从 UI 线程中读取。如果您不能保证这一点,则必须使用锁,将写入编组到 UI 线程。 (使用control.Invoke() or BackgroundWorker或者,确保写入是指向对象的原子写入,该对象在 UI 线程可见时未被后台线程编辑。我不会假设像这样的标准容器List<T>是线程安全的。

[措辞已更改]

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

允许两个线程同时编辑同一对象的不同属性是否安全? 的相关文章

随机推荐

  • 列出磁盘上的所有分区[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在用 C 为 Windows 不支持的文件系统创建一个实用程序 这意味着我不能只访问驱动器 我需要
  • Android API级别30,无法再从Android arp表获取wifi网络设备MAC地址

    我有一个小型网络扫描仪应用程序 它需要查找响应 ping 等的扫描设备的 MAC 地址 很快 Google 需要 targetSdkVersion 30 这意味着在没有响应的情况下无法再以任何方式访问 arp 表 没有权限 以前我用过 bu
  • 错误:您的要求无法解析为一组可安装的软件包。(在服务器上)

    我的项目使用 laravel 5 3 现在我正在将其设置到服务器 这样做时出现了问题 我陷入了这个错误点 当我跑步时 作曲家安装 no dev 命令出现以下错误 Problem 1 Installation request for fgro
  • 在 IE9 中使用 cookie 发出 CORS 请求?

    在 IE9 中 我尝试使用 cookie 发出跨源请求 但是 即使我将 Access Control Allow Origin Access Control Allow Credentials Access Control Allow Me
  • 从 Excel 导出注释

    有没有办法从 Excel 工作表中导出注释以及单元格值 以下是返回工作表中所有注释的函数示例 Sub CreateCommentsSummary Dim rgComments As Range rgCell As Range rgOutpu
  • Xcode 9 - 链接器命令失败,退出代码为 1

    编译应用程序时出现以下错误 使用比以前的文件 4 0 旧版本的 Swift 语言 3 0 编译的文件 请你帮助我好吗 使用 xcworkspace 来构建而不是 xcproject 当使用 Cocoapods 并且您从 xcproject
  • 如何自动发现 WCF 服务?

    有没有办法自动发现网络中特定的 WCF 服务 如果可能的话 我不想用地址配置我的客户端 是的 有一种自动发现服务的方法 NET 4 0 包含一个称为 WCF Discovery 的功能 它基于 WS Discovery 协议 这里有一个显示
  • sed -i 选项有什么作用?

    我正在调试 shell 脚本并尝试找出以下命令执行的任务 sed i 1 999d home org user data txt 我需要更改此命令 因为它失败并出现以下错误 illegal option sed i 但在更改之前 我需要了解
  • 在 Laravel 中动态使用模型

    在我的 laravel 项目中 我创建了一个控制器 用于从调用同一控制器的所有刀片中删除项目 通过传递动态 id 和模型名称 但显示找不到类的错误 例如 未找到 用户 类 如何添加使用用户 动态地在我的控制器中编写代码 namespace
  • 如何设置 hy 项目以便可以使用 pytest 进行测试

    我正在尝试使用 pytest 测试 hy 项目 但 pytest 发现我的测试时遇到问题 需要做什么才能让 pytest 能够获取用 hy 编写的测试 我假设测试可以用 hy 编写并由 pytest 发现 因为native tests主要
  • Akka-http中获取客户端IP

    我正在尝试编写一个 Akka HTTP 微服务 akka 版本 2 4 11 Scala 版本 2 11 8 在撰写本文时都是最新版本 它知道客户端服务的 IP 即远程地址 但我无法得到这个上班 我可以创建并运行一个显示 Hello 的服务
  • 我将如何设计客户端队列系统?

    OVERVIEW 我正在开发一个项目 但遇到了一些问题 因为事情没有按照我希望的顺序发生 所以我一直在考虑设计某种队列 我可以用它来组织启动期间 即页面加载时 使用的函数调用和其他各种 JavaScript jQuery 指令 我正在寻找的
  • 使用SASS/SCSS生成CSS变量

    我目前正在使用 SCSS 尝试重新创建 CSS 块 CSS 块如下 root Franklin Blue 1d1c4d Light Blue 4e5d94 Pale Blue 7289da Pure White ffffff VLight
  • IIS 和 ASP.Net Web 开发服务器之间的行为差​​异?

    在开发过程中 我通常使用 Web 开发服务器 有时称为 Cassini 测试 ASP Net 应用程序 有时 当我发布到真实的 IIS 环境时 我注意到应用程序的行为有所不同 那么 生产 IIS 服务器和 ASP Net Web 开发服务器
  • 使用 SQL 凭据通过 OpenRowSet 打开文件

    我正在尝试运行以下语句 INSERT INTO table SELECT FROM OPENROWSET Microsoft ACE OLEDB 12 0 Excel 12 0 Database server folder file xls
  • 无法卸载 Tensorflow

    The 下图 https i stack imgur com LVJTh png显示已安装的各种版本的tensorflow 但我无法卸载它 我尝试了 pip pip3 conda 但仍然无法识别 TensorFlow 我什至尝试了该线程中的
  • 0.0 - 1.0 值范围的命名约定?

    对于命名变量 我希望尽可能清晰 百分比的范围可以是 0 到 100 我的公共变量只接受 0 0 到 1 0 之间的值 因此将其命名为 百分比 可能会导致混乱 并且简单地将其命名为 值 不会澄清范围限制 对于表示 0 0 和 1 0 范围内的
  • 仅当元素前面没有文本节点时,如何匹配元素的第一个子元素?

    我试图匹配 div 的 h4 使用 jQuery 以便我可以删除它的上边距 但是 我只想匹配 h4 上面没有文本的情况 例如 匹配这个 div h4 Header h4 div 但不是这个 div Blah blah blah h4 Hea
  • 如何垂直对齐两个div的内容?

    我正在尝试对齐两个div在我的 HTML 中水平放置 第一个包含图像 第二个包含文本 这是使用的代码 div style width 55px img src img look svg alt div div style display i
  • 允许两个线程同时编辑同一对象的不同属性是否安全?

    我正在编写一个编目应用程序 它解析文件并从中提取信息 并将每个文件的信息存储在对象实例中 除了从文件中提取的数据之外 对象还具有其他元数据属性 作者 标签 注释等 这些属性随后存储在单独的 XML 文件中 从文件中提取数据是一个耗时的过程