フォルダーを検索する再帰関数があります。
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="Index was out of range. It must be non-negative and less than the size of collection. Parameter name: index"
Source="mscorlib" ParamName="index" StackTrace: System.Collections.ArrayList.get_Item(Int32 インデックス) 内 System.Windows.Forms.ToolStripItemCollection.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.StatusStrip.WndProc(Message& m) の Windows.Forms.ToolStrip.WndProc(Message& m) System.Windows.Forms.Control.Control.ControlNativeWindow.WndProc(Message& m) の System.Windows.Forms.NativeWindow。 DebuggableCallback(IntPtr hWnd、Int32 msg、IntPtr wparam、IntPtr lparam) InnerException:
編集
プログラムのコード全体を読んだ後、関数が Do_Work 内で呼び出されていることに気付きました。
backgroundWorker2.ReportProgress((1));
報告する aaand すべてが機能しています。
理由はわかりませんが、どういうわけか、toolStripItem は backgroundWorker 内でもアクセスできますが、ラベルやその他のコントロールはアクセスできません。