У меня есть код ниже, который проходит через все каталоги данной области sDir
, он также работает в своем собственном потоке.Это создает список списков, который затем преобразуется в массив для построения древовидного представления.
Однако я также хотел бы подсчитать количество каталогов и файлов, по которым выполняется поиск, и отобразить его в моем пользовательском интерфейсе.Если я добавлю this.Invoke((MethodInvoker)(() => DirCL.Text = "Dir: " + dirC.ToString()));
и this.Invoke((MethodInvoker)(() => FileCL.Text = "Files: " + FileC.ToString()));
liststring.Add(Files);
, функция переместится с 10 секунд на область с 65 000 файлов до 100 секунд.
Я предполагаю, что это увеличение связано с тем, что MethodInvoker приостанавливает функцию для записи в пользовательский интерфейс.
Есть ли лучший способ для меня писать код в пользовательском интерфейсе, который находится в другомнить?
int dirC = 0;
int FileC = 0;
private void DirSearch(string sDir)
{
try
{
string[] array1 = Directory.GetDirectories(sDir);
for (int i1 = 0; i1 < array1.Length; i1++)
{
string Dir = array1[i1];
dirC++;
//this.Invoke((MethodInvoker)(() => DirCL.Text = "Dir: " + dirC.ToString()));
try
{
String[] array = Directory.GetFiles(Dir, txtFile.Text);
for (int i = 0; i < array.Length; i++)
{
string Files = array[i];
FileC++;
//this.Invoke((MethodInvoker)(() => FileCL.Text = "Files: " + FileC.ToString()));
liststring.Add(Files);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
DirSearch(Dir);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
ErrC++;
}
}