我正在编写一个编目应用程序,它解析文件并从中提取信息,并将每个文件的信息存储在对象实例中。除了从文件中提取的数据之外,对象还具有其他元数据属性(作者、标签、注释等),这些属性随后存储在单独的 XML 文件中。
从文件中提取数据是一个耗时的过程,因此我让它在单独的线程上运行。从文件中提取的属性将仅来自文件,因此具有 [ReadOnly] 属性以防止用户编辑它们。另一方面,元数据属性仅由用户填充,因此不是只读的。我允许用户通过 PropertyGrid 查看/编辑这些对象。
因此,如果提取过程在填充对象的文件属性的一个线程上运行,那么让用户同时编辑元数据属性是否存在危险?我正在尝试决定是否应该使用模态界面来阻止用户在提取完成/取消之前执行任何操作,或者使用非模态界面来允许他们在提取运行时继续工作。
具体针对您的问题:不,没有问题。
您应该注意的是,后台线程写入的属性在写入时不会从 UI 线程中读取。如果您不能保证这一点,则必须使用锁,将写入编组到 UI 线程。 (使用control.Invoke()
or BackgroundWorker
或者,确保写入是指向对象的原子写入,该对象在 UI 线程可见时未被后台线程编辑。我不会假设像这样的标准容器List<T>
是线程安全的。
[措辞已更改]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)