我有一个搜索文件夹的递归函数。
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,但我总是得到“System.ArgumentOutOfRangeException”。
如何增加这个值(最多 5000)并在 TSI 中显示?
错误:
System.ArgumentOutOfRangeException 未处理 Message="索引超出范围。它必须是非负数并且小于集合的大小。参数名称:索引"
Source="mscorlib" ParamName="index" StackTrace:在 System.Windows.Forms.ToolStripItemCollection.get_Item(Int32 索引)中的 System.Collections.ArrayList.get_Item(Int32 索引)中 System.Windows.Forms.ToolStrip.OnPaint(PaintEventArgs e) 在 System.Windows.Forms.Control.WndProc(Message& m) 中的 System.Windows.Forms.Control.WmPaint(Message& m) 中的 System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer) 中。 System.Windows.Forms.Control.ControlNativeWindow 中的 Windows.Forms.ToolStrip.WndProc(Message& m) System.Windows.Forms.NativeWindow 中的 System.Windows.Forms.StatusStrip.WndProc(Message& m)。 DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) InnerException:
编辑
阅读程序的整个代码后,我注意到该函数正在 Do_Work 中调用,所以我使用的是
backgroundWorker2.ReportProgress((1));
报告aa并且一切正常。
我不知道为什么,但不知何故,即使在 backgroundWorker、标签和其他控件中也可以访问 toolStripItem。