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

Eri*_*tas 8 .net c# multithreading properties thread-safety

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

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

因此,如果提取过程在一个填充对象文件属性的线程上运行,那么让用户同时编辑元数据属性是否有任何危险?我试图决定是否应该使用模式接口来阻止用户在提取完成/取消之前做任何事情,或者使用非模态接口来允许它们在提取运行时继续工作.

小智 5

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

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

[措辞已更改]