我有一个搜索文件夹的递归功能。
private int contFiles = 0;
private List<string> GetFiles(string folder, string filter)
{
var files = new List<string>();
Action<string> getFilesInDir = null;
getFilesInDir = new Action<string>(dir =>
{
contFiles++;
tslQuant.Text = contFiles.ToString(); //ToolStripItem
try
{
// get all the files in this directory
files.AddRange(Directory.GetFiles(dir, filter));
// and recursively visit the directories
foreach (var subdir in Directory.GetDirectories(dir))
{
getFilesInDir(subdir);
}
}
catch (UnauthorizedAccessException uae)
{
Console.WriteLine(uae.Message);
}
});
getFilesInDir(folder);
return files;
}
该函数递增contFiles并将该数字设置为ToolStripItem,但我总是得到&#34; System.ArgumentOutOfRangeException&#34;。
如何增加此值(最多5000)并以TSI显示?
ERROR:
System.ArgumentOutOfRangeException未处理 消息=&#34;索引超出范围。它必须是非负的且小于集合的大小。 参数名称:index&#34;
源=&#34; mscorlib程序&#34; PARAMNAME =&#34;指数&#34; 堆栈跟踪: 在System.Collections.ArrayList.get_Item(Int32索引)中 在System.Windows.Forms.ToolStripItemCollection.get_Item(Int32索引)中 在System.Windows.Forms.ToolStrip.OnPaint(PaintEventArgs e)中 在System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e,Int16 layer)中 在System.Windows.Forms.Control.WmPaint中(消息&amp; m) 在System.Windows.Forms.Control.WndProc中(消息&amp; m) 在System.Windows.Forms.ToolStrip.WndProc中(消息&amp; m) 在System.Windows.Forms.StatusStrip.WndProc中(消息&amp; m) 在System.Windows.Forms.Control.ControlNativeWindow.WndProc中(消息&amp; m) 在System.Windows.Forms.NativeWindow.DebuggableCallback中(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam) InnerException:
在读完程序的整个代码之后,我注意到函数在Do_Work中被篡改,所以我使用了
backgroundWorker2.ReportProgress((1));
报告aaand一切正常。
我不知道为什么,但不知何故,即使在backgroundWorker,标签和其他控件内也可以访问toolStripItem。
答案 0 :(得分:0)
似乎你永远不会将contFiles
变量重置为零。如果你多次拨打GetFiles()
,可能会遇到问题。所以你可能想把它重置为零
contFiles = 0; // Reset variable to prevent overflow
var files = new List<string>();
Action<string> getFilesInDir = null;
getFilesInDir = new Action<string>(dir =>
{ ...