Написание кода для пользовательского интерфейса в отдельной функции замедления потока.C # - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть код ниже, который проходит через все каталоги данной области 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++;
            }

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...