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

时间:2015-05-15 07:06:31

标签: c# winforms .doc

我正在尝试创建一个应用程序,显示文件夹及其子文件夹中.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 = ""
            });
        }
    }
}

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

  

此时应用程序冻结

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

您应该在后台线程(使用BackgroundWorkerTask.Run)中完成所有工作,然后在完成后仅修改UI(在UI线程上)。