我正在编写一个编目应用程序,它解析文件并从中提取信息,并将每个文件的信息存储在一个对象实例中。除了从文件中提取的数据外,对象还具有其他元数据属性(作者、标签、注释等),这些属性随后会存储在单独的 XML 文件中。
从文件中提取数据是一个耗时的过程,所以我让它在一个单独的线程上运行。从文件中提取的属性只会来自文件,因此具有 [ReadOnly] 属性以防止用户编辑它们。另一方面,元数据属性仅由用户填充,因此不是只读的。我允许用户通过 PropertyGrid 查看/编辑这些对象。
因此,如果提取过程在填充对象文件属性的一个线程上运行,那么让用户同时编辑元数据属性是否有任何危险?我正在尝试决定是应该使用模态界面来阻止用户在提取完成/取消之前做任何事情,还是应该使用非模态界面来允许他们在提取运行时继续工作。
最佳答案
具体到您的问题:不,没有问题。
您应该注意的是,后台线程写入的属性在写入时不会从 UI 线程中读取。如果你不能保证这一点,你必须要么使用锁,要么将写入编码到 UI 线程。 (使用 control.Invoke()
或 BackgroundWorker
或者,确保写入是指向对象的指针的原子写入,该对象未被后台线程编辑,但从 UI 线程可见。我不认为像 List<T>
这样的标准容器是线程安全。
[措辞改变]
关于c# - 允许两个线程同时编辑同一对象的不同属性是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2329348/