尝试从 .doc 多个文件中读取作者时应用程序冻结

Application freezes when trying to read Author from .doc multiple files

我正在尝试制作一个显示文件夹及其子文件夹中 .doc 文件的所有作者的应用程序,问题是我使用了 Directory.GetFiles("*.doc", SearchOption.AllDirectories) 并且当我试图从文件夹中读取时有很多文件,应用程序冻结在这一点上。 这是我的代码

FileInfo[] Files = dir.GetFiles("*.doc", SearchOption.AllDirectories);
foreach(FileInfo file in Files) 
{
    try
    {
        //ConvertDOCToDOCX(file.FullName);
        using(WordprocessingDocument sourcePresentationDocument = WordprocessingDocument.Open(file.FullName, false)) 
        {
            metadataList.Add(new Metadata() 
            {
                Name = "Title", Value = file.Name
            });
            metadataList.Add(new Metadata() 
            {
                Name = "Author", Value = sourcePresentationDocument.PackageProperties.Creator
            });
            metadataList.Add(new Metadata() 
            {
                Name = "", Value = ""
            });
        }
    }
}

the app freeze in this point

是的,因为您在 UI 线程中做了很多工作。不要那样做 - 永远不要那样做。

您可能应该在后台线程中完成所有工作(使用 BackgroundWorkerTask.Run),然后只修改 UI(在 UI线程)当你完成时。

我认为你不需要这个 "WordprocessingDocument" - 这会产生很重的负载 - 你可以通过 .net 默认文件方法读取元信息。

举个例子,你应该看看Read/Write 'Extended' file properties (C#)