Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2019, 15:48   #1
delik77
Новичок
Джуниор
 
Регистрация: 27.05.2019
Сообщений: 1
По умолчанию подвисает интерфейс при асинхронном построчном считывании файла

такая беда, я ещё очень плохо понимаю как делать независящие друг от друга действия в шарпе, вобщем есть такой код, открывающий текстовый файл по кнопке, подсчитывающий в нём кол-во строк и выводящий результаты подсчёта в label, но он выводит в label подсчитанное количество первых пары десятков/сотен строк и наглухо вешает интерфейс до конца подсчёта строк в файле. подскажите пожалуйста, как сделать правильно, чтобы интерфейс не подвисал ?

и ещё, по мере подсчёта строк в файле увеличивается кол-во занятой приложением памяти, как от этого избавится, что тут сделано неверно ?
Код:
private async void button14_Click(object sender, EventArgs e)
        {
            openFileDialog1.InitialDirectory = Application.StartupPath + @"\data";//Папка приложения + вложенная папка
            openFileDialog1.FileName = "domains.txt";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string path = openFileDialog1.FileName;
                textBox10.Text = path;
                try
                {
                    using (StreamReader sr = new StreamReader(path))
                    {
                        string line;
                        int i = 0;
                        string showToLabel;
                        while ((line = await sr.ReadLineAsync()) != null)
                        {
                            i++;
                            showToLabel = i.ToString();
                            label22.Text = showToLabel;
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
delik77 вне форума Ответить с цитированием
Старый 27.05.2019, 20:16   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Ну можно вот так сделать:

Код:
 new Task(() =>
                    {
                        using (StreamReader sr = new StreamReader(path))
                        {
                            string line;
                            int i = 0;
                            string showToLabel;

                            while (!sr.EndOfStream)
                            {
                                line = sr.ReadLine();
                                this.Invoke(new MethodInvoker(() => label22.Text = (++i).ToString()));                                
                            }
                        }
                    }).Start();
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помощь в считывании файла SVD102 C# (си шарп) 6 18.11.2015 09:20
Вывод мусора при считывании файла fewcher Помощь студентам 0 15.10.2013 18:51
Ошибка при считывании из файла JustSay Общие вопросы Delphi 3 29.07.2013 13:28
доступ по неверному указателю при построчном считывании данных из файла okrill Общие вопросы C/C++ 3 01.09.2012 19:07
Проблема при считывании из файла JeyKip Общие вопросы C/C++ 0 17.01.2010 22:03