如何在不使应用程序无响应的情况下扫描文件并显示当前扫描的详细信息

本文关键字:扫描 文件 显示 详细信息 情况下 应用程序 响应 | 更新日期: 2023-09-27 18:28:25

我正在使用C#开发一个用于pdf文件管理的桌面应用程序。

当我在任何文件夹中搜索*.pdf时,应用程序会在一段时间内停止响应,这是不希望的行为。

我使用XmlWriter编写数据(即文件名、作者名、主题)。此外,我有一个标签来显示文件的当前扫描,但它只显示扫描完成后的最后一个文件。

如何在不使应用程序无响应的情况下扫描文件并显示当前扫描的详细信息

这是一个经典的问题。

基本上,显示应用程序的线程就是执行所有工作的线程。因此,GUI的任何更新/响应都必须等到它完成。

解决这个问题的方法是使它成为多线程的。最简单的方法是使用后台工作线程,该线程将执行写搜索和其他操作,并且只保留主线程。

http://www.dotnetperls.com/backgroundworker

如果你可以更新你的程序,.NET 4.0有新的IO函数,在完成之前返回:

例如EnumerateFiles:

http://msdn.microsoft.com/en-us/library/dd383458.aspx

除了Haedrian的回答之外,我想说您可以使用BackGroundWorkerProgressChanged事件来处理更新进度指标。

更具体地说,您可以使用ReportProgress方法引发该事件,传递当前正在扫描的文件的名称,并且在BackGroundWorker.ProgressChanged事件处理程序中,您可以更新要用于显示正在扫描的文件的标签

如果您不想创建额外的线程,可以调用

Application.DoEvents();

在循环中。这使应用程序保持响应并更新标签。