我正在创建一个在目录中找到重复文件的程序,但是当它搜索的目录中有太多这些文件时,它会使应用程序崩溃。 我想知道是否有办法缓冲它抓取的文件数量。 以下是执行我要解释的事情的代码:
string[] filePathsb = Directory.GetFiles(
@"" + Dirfind, "*" + filetyperest, SearchOption.AllDirectories);
for (int i = 0; i < filePathsb.Length; i++)
{
ListBoxItem itm = new ListBoxItem();
try
{
List<TodoItem> items = new List<TodoItem>();
filelistboxitem.Items.Add(new TodoItem() { Title = "" + filePathsb[i], Deletea = "" + i });
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show("Error occurance: " + ex);
}
}
只需注意:当有大约&lt; 50个文件。
答案 0 :(得分:2)
尝试使用Backgroundworker线程查找文件。您的UI不会冻结,文件查找逻辑将在'后台'中运行
答案 1 :(得分:2)
我该怎么办?
一个简单的改进就是打电话
SuspendLayout();
在循环开始之前,
ResumeLayout();
循环完成后。这将降低更新列表框的成本,因此整个过程更快完成。
如何防止完全锁定用户界面?
您可以使用线程在后台更新列表。对于WinForms,通常使用BackgroundWorker。请注意,您无法直接从BackgroundWorker更新UI,因为它们在不同的线程上运行。通常的事件机制ReportProgress
不适用于这种情况,因为您希望在加载所有文件之前不断更新UI。相反,您可以使用此处概述的方法: