尝试从 .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 线程中做了很多工作。不要那样做 - 永远不要那样做。
您可能应该在后台线程中完成所有工作(使用 BackgroundWorker
或 Task.Run
),然后只修改 UI(在 UI线程)当你完成时。
我认为你不需要这个 "WordprocessingDocument" - 这会产生很重的负载 - 你可以通过 .net 默认文件方法读取元信息。
举个例子,你应该看看Read/Write 'Extended' file properties (C#)
我正在尝试制作一个显示文件夹及其子文件夹中 .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 线程中做了很多工作。不要那样做 - 永远不要那样做。
您可能应该在后台线程中完成所有工作(使用 BackgroundWorker
或 Task.Run
),然后只修改 UI(在 UI线程)当你完成时。
我认为你不需要这个 "WordprocessingDocument" - 这会产生很重的负载 - 你可以通过 .net 默认文件方法读取元信息。
举个例子,你应该看看Read/Write 'Extended' file properties (C#)