C# Treeview复选框选中了C中listview中的文件和文件夹加载#
我想做一个审计工具,旨在复制文件和文件夹 我使用treeview使用递归方法加载文件和文件夹,但当treeview检查listview中的文件和文件夹加载时,这需要大量时间(2GB需要21分钟)。这是个问题 如何在最短的时间内将文件和文件夹从treeview加载到listview,以实现更快的计算 这是我的密码:C# Treeview复选框选中了C中listview中的文件和文件夹加载#,c#,treeview,C#,Treeview,我想做一个审计工具,旨在复制文件和文件夹 我使用treeview使用递归方法加载文件和文件夹,但当treeview检查listview中的文件和文件夹加载时,这需要大量时间(2GB需要21分钟)。这是个问题 如何在最短的时间内将文件和文件夹从treeview加载到listview,以实现更快的计算 这是我的密码: private void btnAddToListViewCheckedItem_Click(object sender, EventArgs e) { foreach (Tr
private void btnAddToListViewCheckedItem_Click(object sender, EventArgs e)
{
foreach (TreeNode tn in tvLoadTreeviewFromListView.Nodes)
{
AddToListView(tn);
}
}
private void AddToListView(TreeNode tn)
{
{
FileInfo file = new FileInfo(tn.Text);
string[] suffix = { "B", "KB", "MB", "GB", "TB" };
if (file.Exists)
{
int s = 0;
long size = file.Length;
while (size >= 1024)
{
NO_OF_FILES += 1;
s++;
size /= 1024;
}
String countFileSize = string.Format("{0}{1}", size, suffix[s]);
ListViewItem item = lvLoadSelectedFileAndFolder.Items.Add(file.Name);
item.ImageIndex= sysIcons.GetIconIndex(tn.Text);
item.SubItems.Add(tn.Text);
item.SubItems.Add(countFileSize);
}
foreach (TreeNode tnx in tn.Nodes)
{
for (int i = 0; i < lvLoadSelectedFileAndFolder.Items.Count; i++)
{
int ii = 1;
if (tnx.Text == lvLoadSelectedFileAndFolder.Items[i].SubItems[ii].Text)
{
return;
}
}
if (tnx.Checked)
{
AddToListView(tnx);
}
}
}
catch (Exception ){}
}
private void btnAddToListViewCheckedItem\u单击(对象发送方,事件参数e)
{
foreach(TvLoadTreeView.Nodes中的TreeNode tn)
{
AddToListView(tn);
}
}
私有void AddToListView(TreeNode tn)
{
{
FileInfo file=新的FileInfo(tn.Text);
字符串[]后缀={“B”、“KB”、“MB”、“GB”、“TB”};
如果(file.Exists)
{
int s=0;
long size=file.Length;
而(大小>=1024)
{
_文件的数量+=1;
s++;
大小/=1024;
}
String countFileSize=String.Format(“{0}{1}”,大小,后缀[s]);
ListViewItem item=lvLoadSelectedFileAndFolder.Items.Add(file.Name);
item.ImageIndex=sysIcons.GetIconIndex(tn.Text);
项目.子项目.添加(tn.Text);
item.SubItems.Add(countFileSize);
}
foreach(tn.Nodes中的TreeNode tnx)
{
对于(int i=0;i
您的后缀
数组基本上是一个常量,但每次AddToListView
处理存在的文件名时,都会在堆上重新分配。此外,在加载listview时暂停UI更新。试试这个
const string[] suffix = { "B", "KB", "MB", "GB", "TB" };
private void btnAddToListViewCheckedItem_Click(object sender, EventArgs e)
{
try
{
lvLoadSelectedFileAndFolder.BeginUpdate();
foreach (TreeNode tn in tvLoadTreeviewFromListView.Nodes)
{
AddToListView(tn);
}
}
finally
{
lvLoadSelectedFileAndFolder.EndUpdate();
}
}
谢谢但是我无法访问
lvLoadSelectedFileAndFolder.Items.BeginUpdate()代码>属性。可以访问lvLoadSelectedFileAndFolder.BeginUpdate()代码>属性。。有需要写入的方法吗?抱歉,这些方法位于ListView
上,而不是Items
属性上。我已经更正了代码。