Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269

ProgressBar непрерывная работа

18.09.2019, 16:03. Показов 6214. Ответов 53
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
(wpf) Загружаю форму

C#
1
2
3
4
5
private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            loadFileProgressBar.IsIndeterminate = false;
            ///....
        }
При клике на кнопку должен непрерывно работать прогрессбар, при изменении в xaml работает, или UserControl_Loaded true работает.
Но в при клике не работает, я где-то ошибся...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
private async void DateButton_Click(object sender, EventArgs e)
        {
            loadFileProgressBar.IsIndeterminate =  true;
            string path = (sender as Button)?.Tag?.ToString();
 
            try
            {
                string text = "";
 
                await Task.Run(() =>
                {
                    text = File.ReadAllText(path);
 
                    viewLogTextBox.Dispatcher.BeginInvoke(new Action(() =>
                    {
                        viewLogTextBox.Text = text;
                        //viewLogTextBox.SelectionStart = viewLogTextBox.Text.Length;
                        scrollViewerTextBox.ScrollToBottom();
                        loadFileProgressBar.IsIndeterminate = false;
                    }));
                });
            }
            catch { }
        }
Добавлено через 5 минут

Не по теме:

Оу, юбилейное сообщение на форуме

0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.09.2019, 16:03
Ответы с готовыми решениями:

Работа с ProgressBar
Как привязать прогрессбар к выполнению записи в файл? Идет запись в файл: StreamWriter sw = new StreamWriter("output.txt",...

Непрерывная работа программы
Сделал программу, которая рассчитывает траекторию маятника. Дело в том, что программа работает пока не пройдет определенное время. ...

Работа с progressbar
Знаю что опять тупой вопрос, но очень нужем мне и еще 2 (как минимум) человек. Короче, кинул на форму progressbar1 и скрил его. Потом при...

53
Заблокирован
19.09.2019, 12:06
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ShmelVG Посмотреть сообщение
На счет последнего варианта результат тот же, он запускается но не останавливается (
Поставьте точки останова в блоке catch
и на строке loadFileProgressBar.IsIndeterminate = false;
И проверьте как они сработают.
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
19.09.2019, 12:09  [ТС]
ЭлдХасп, создал там ошибку но он не заходит туда, а спокойно исполняет метод до конка и на выходе прогрессбар начинает работать

Добавлено через 2 минуты
ЭлдХасп, если в конце false то он даже не включается. Мне понравился вариант от Defences, но его нужно доработать, т.к. он запускается не сразу по нажатии кнопки
0
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
19.09.2019, 12:13
ShmelVG, я не понимаю зачем вообще тру катч, вот рабочий вариант 100%

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private async void DateButton_Click(object sender, EventArgs e)
        {
            var btn = (Button) sender;
            if (btn?.Tag == null) return;
            pbStatus.IsIndeterminate = true;
            string path = btn.ToString();
 
            string text = await Task.Run(() => File.ReadAllText(path));
 
            viewLogTextBox.Text = text;
            viewLogTextBox.SelectionStart = viewLogTextBox.Text.Length;
            scrollViewerTextBox.ScrollToBottom();
            pbStatus.IsIndeterminate = false;
 
        }
Добавлено через 1 минуту
ShmelVG, в вашем случае 1-ый мой вариант не подойдет, так как вы читаете файл. Там нужно будет тогда делать построчное чтение файла и создавать стопы на увед. каждые 10 строк к примеру, дабы не было спама, а то форма залагает. Лучше юзать IsIndeterminate, как вы и планировали
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
19.09.2019, 12:17  [ТС]
К сожалению это не лучший ответ) Когда нажимаю на кнопку, он находится в состоянии "нажатой" долгое время и прогрессбар не запускается( Возможно надо этот способ применить где загружается лог
0
Заблокирован
19.09.2019, 12:19
Цитата Сообщение от ShmelVG Посмотреть сообщение
если в конце false то он даже не включается.
Вы так и не поставили точку останова!
Он не включается потому, что срабатывает практически мгновенно!


Проверьте время работы!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        private void DateButton_Click(object sender, EventArgs e)
            => LoadFileAsync((sender as Button)?.Tag?.ToString());
 
        private async void LoadFileAsync(string path)
        {
             Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            
            loadFileProgressBar.IsIndeterminate = true;
                string text = "";
 
            try
            {
 
                await Task.Run(() =>{text = File.ReadAllText(path);});
 
            }
            catch { }
            viewLogTextBox.Text = text;
            viewLogTextBox.SelectionStart = viewLogTextBox.Text.Length;
            scrollViewerTextBox.ScrollToBottom();
            loadFileProgressBar.IsIndeterminate = false;
                        stopwatch.Stop();
            var time = stopwatch.ElapsedMilliseconds;
        } // Вот здесь точка останова ! И посмотрите значение time
1
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
19.09.2019, 12:19  [ТС]
Defences, если сделать так, то System.NotSupportedException: "Данный формат пути не поддерживается."
В месте File.ReadAllText(path));
0
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
19.09.2019, 12:21
ShmelVG поддерживаю ЭлдХасп, ибо у вас читается файл размером пару мб Можно даже без стопвотча проверить, вот так с исп. задержки
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private async void DateButton_Click(object sender, EventArgs e)
        {
            var btn = (Button) sender;
            if (btn?.Tag == null) return;
            pbStatus.IsIndeterminate = true;
            string path = btn.Tag.ToString();
 
            string text = await Task.Run(() => File.ReadAllText(path));
             
            await Task.Delay(5000); // задержка
 
            viewLogTextBox.Text = text;
            viewLogTextBox.SelectionStart = viewLogTextBox.Text.Length;
            scrollViewerTextBox.ScrollToBottom();
            pbStatus.IsIndeterminate = false;
 
        }
Добавлено через 46 секунд
ShmelVG, ну значит вы херь передаете в виде патча, посмотрите какое значение переменной path
1
Заблокирован
19.09.2019, 12:22
То есть, он включается.
Потом почти мгновенно считывает файл.
И выключается.

Происходит так быстро, что вы не успеваете даже заметить.
0
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
19.09.2019, 12:24
ShmelVG, сорри, мой bad так сказать. Я в примере выше, писал
C#
1
btn.ToString();
вместо
C#
1
btn.Tag.ToString();
Поправил сообщение выше на рабочий вариант, теперь будет работать!)
1
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
19.09.2019, 12:26  [ТС]
ЭлдХасп, проверил по stopwatch, время хорошее (3, 5, 6...25), где вы рекомендовали поставить т.останова ничего не работает , кнопка в состоянии "нажата", а когда выходит из метода, то файл какое-то время загружается и потом прогрессбар
0
Заблокирован
19.09.2019, 12:28
ShmelVG, пройдите пошагово по методу.
По вашему описанию.
Или у вас там маленький файл (меньше сотен мегабайт) и срабатывает всё очень быстро.
Или вы ловите исключение, и проскакиваете его из-за try.

Не проверив пошагово - понять невозможно.

Добавлено через 2 минуты
Цитата Сообщение от ShmelVG Посмотреть сообщение
проверил по stopwatch, время хорошее (3, 5, 6...25), где вы рекомендовали поставить т.останова ничего не работает
Покажите тот код который проверяете.
У меня складывается впечатление, что код в теме и ваш код - сильно различны.
И вы как-то не правильно применяете код из темы.
1
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
19.09.2019, 12:33  [ТС]
ЭлдХасп, спасибо вам за отклик на мою проблему, мне очень помог способ Defences, это 100% то что нужно. Единственное я так и не разобрался из-за чего таким способом работает и не работало раньше?

Добавлено через 2 минуты
Разобрался) Но с задержкой не очень конечно) Но что поделать)
0
Заблокирован
19.09.2019, 12:35
Цитата Сообщение от ShmelVG Посмотреть сообщение
Единственное я так и не разобрался из-за чего таким способом работает и не работало раньше?
Не увидев ваш настоящий код - сказать невозможно.
Эмулируя у себя на просто считывании огромного файла или через Sleep - всё работает без каких-либо проблем.
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
19.09.2019, 12:43  [ТС]
ЭлдХасп,Defences, просто выглядит не очень эстетично с задержкой, получается файлы загружаются по разному и если 5 секунд не хватило за загрузки, то человек будет думать что всё зависло, а ставить 10 секунд для оч маленьких логов тоже не очень.
Попробую сейчас дать код, который касается только проблемы

Добавлено через 6 минут
ЭлдХасп, Defences, вот приметно такой так получается касаемо моей проблемы

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
        private string _logName = "logs";
 
        const int CountDateItems = 3;
        private int _skipped;
 
        public Конструктор()
        {
            InitializeComponent();
            Loaded += UserControl_Loaded;
        }
 
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            _logName = "logs";
            AddButtons(GetFiles(0));
        }
 
        private List<FileData> GetFiles(int skip)
        {
            if (skip < 0)
                skip = 0;
 
            var data = new List<FileData>();
 
            try
            {
                string directoryName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, _logName);
 
                var files = Directory.GetFiles(directoryName);
 
                if (files == null || files.Length == 0)
                    return data;
 
                data = files
                    .Select(x => FileData.ToFileData(x))
                    .OrderBy(x => x.Date)
                    .ToList();
 
                if (skip >= data.Count)
                    skip = _skipped;
 
                if (skip < 0)
                    skip = 0;
 
                data = data.Skip(skip).Take(CountDateItems).ToList();
            }
            catch (Exception ex)
            {
                _log.Error(ex, "Ошибка получения файлов.");
            }
            finally
            {
                _skipped = skip;
            }
 
            return data;
        }
 
        private async void DateButton_Click(object sender, EventArgs e)
        {
            var btn = (Button)sender;
            if (btn?.Tag == null) return;
            loadFileProgressBar.IsIndeterminate = true;
            string path = btn.Tag.ToString();
 
            string text = await Task.Run(() => File.ReadAllText(path));
 
            await Task.Delay(8000);
 
            viewLogTextBox.Text = text;
            viewLogTextBox.SelectionStart = viewLogTextBox.Text.Length;
            scrollViewerTextBox.ScrollToBottom();
            loadFileProgressBar.IsIndeterminate = false;
        }
 
        private void AddButtons(List<FileData> files)
        {
            filesPanel.Children.Clear();
 
            foreach (var file in files)
            {
                Button button = new Button
                {
                    Tag = file.Path,
                    Content = file.Text,
                    Height = ...,
                    Width = ...,
                    Background = ...,
                    FontFamily = new FontFamily("..."),
                    FontSize = ...,
                    Margin = new Thickness(...)
                };
                button.Click += DateButton_Click;
                filesPanel.Children.Add(button);
            }
        }
 
        private class FileData
        {
            public string Text;
            public DateTime Date;
            public string Path;
 
            public static FileData ToFileData(string file)
            {
                DateTime.TryParse(System.IO.Path.GetFileNameWithoutExtension(file), out DateTime dt);
 
                string text = dt.ToString("dd-MM-yyyy");
 
                return new FileData
                {
                    Path = file,
                    Text = text,
                    Date = dt
                };
            }
        }
0
Заблокирован
19.09.2019, 12:58
Цитата Сообщение от ShmelVG Посмотреть сообщение
вот приметно такой так получается касаемо моей проблемы
Блин!
А нафига вы ставите Task.Delay(8000)?

Переделайте так:
C#
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
        private void DateButton_Click(object sender, EventArgs e)
            => LoadFileAsync((sender as Button)?.Tag?.ToString());
 
        private async void LoadFileAsync(string path)
        {
            if (string.IsNullOrWhiteSpace(path))
                return;
            loadFileProgressBar.IsIndeterminate = true;
 
            string text;
            await Task.Run(() =>text = File.ReadAllText(path));
 
            viewLogTextBox.Text = text;
            viewLogTextBox.SelectionStart = viewLogTextBox.Text.Length;
            scrollViewerTextBox.ScrollToBottom();
            loadFileProgressBar.IsIndeterminate = false;
        }
0
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
19.09.2019, 13:09
ShmelVG, задержку я указал, только чтобы вы увидели что работает прогрессбар, так как у вас очень быстро загрузка проходила и вы его не замечали.

Грузим маленький файл - нету прогрессбара, ибо очень быстро грузит
Грузим большой - есть

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private async void DateButton_Click(object sender, EventArgs e)
        {
            var btn = (Button) sender;
            if (btn?.Tag == null) return;
            pbStatus.IsIndeterminate = true;
            string path = btn.Tag.ToString();
 
            string text = await Task.Run(() => File.ReadAllText(path));
             
            viewLogTextBox.Text = text;
            viewLogTextBox.SelectionStart = viewLogTextBox.Text.Length;
            scrollViewerTextBox.ScrollToBottom();
            pbStatus.IsIndeterminate = false;
 
        }
Второй вариант, будет прогресс бар так и так на 2 секунды при маленьком файле, для красоты так сказать. А для больших сколько требуется для загрузки.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private async void DateButton_Click(object sender, EventArgs e)
        {
            int delay = 2000;
            var btn = (Button) sender;
            if (btn?.Tag == null) return;
             string path = btn.Tag.ToString();
             
  if(new System.IO.FileInfo(path).Length > 100000000) // если больше 100 мб убираем задержку, то есть ставим 1 мс или 0.001 сек
            delay = 1;
 
            pbStatus.IsIndeterminate = true;
 
            string text = await Task.Run(() => File.ReadAllText(path));
             
            await Task.Delay(delay); // задержка 2 сек если файл менее 100мб и n времени(зависит от размера) дял файлов более 100 мб
 
            viewLogTextBox.Text = text;
            viewLogTextBox.SelectionStart = viewLogTextBox.Text.Length;
            scrollViewerTextBox.ScrollToBottom();
            pbStatus.IsIndeterminate = false;
 
        }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
19.09.2019, 13:11
Всё! Проблемы с аккаунтом решили!

ShmelVG, у вас что вышло?
0
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
19.09.2019, 13:18
Ну и в итоге получается при втором способе.
Файл 50 мб - грузится 0.1 сек, добавляем задержку чтоыб по красоте было 2.1 сек. А то мелькнет и тут же исчежнет прогрессбар.
Файл 1гб - грузится 2 сек, нету задержки, дабы и так долго грузим, итого 2сек

P.s Форма же отвечает и есть прогресс бар, поэтому юзер не будет думать что повисло...

Добавлено через 2 минуты
Элд Хасп, отлично, а что с акком было? Брутанули вас?))
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
19.09.2019, 13:33  [ТС]
Элд Хасп,

Не по теме:

Ура!


В целом не удачно, такой вариант не работает от 12:58

Добавлено через 2 минуты
Defences, я попробовал ваш вариант, но вот не задача, все файлы 1-10 Мб, и получается при нажатии на кнопку один раз проходит полоска и останавливается, файл отображается, а если чуть больше файл взять, 9 Мб к примеру, то так же один раз проходит полоска и останавливается и ещё секунд 8-10 жду пока загрузится файл.
Когда я нажимаю по кнопке, она находится в состоянии "нажато" пока не отобразится файл и только потом скролл тащит в конец файла
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
19.09.2019, 13:37
Цитата Сообщение от Defences Посмотреть сообщение
отлично, а что с акком было? Брутанули вас?
Я после регистрации один раз вошёл на форум на всех устройствах и больше авторизацию у меня не запрашивало.
Вчера всю авторизацию сбросило.
Ввожу пароль. А это оказывается мало. Нужно ещё кодовое слово, которое дополнительно требуется для модераторов.
Я я даже не помню что его вводил, не то что что это за слово.

Обратился к администрации, а из-за DDOS атаки - они были заняты. Только сейчас отреагировали.

Добавлено через 52 секунды
Цитата Сообщение от ShmelVG Посмотреть сообщение
В целом не удачно, такой вариант не работает от 12:58
Что в нём не работает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.09.2019, 13:37

Работа с ProgressBar
При нажатии на одну из кнопок программа долго грузится, поэтому появилась необходимость добавления ProgressBar. Необходимо чтобы по ходу...

Работа с ProgressBar и циклом
День добрый уважаемые товарищи, хочу реализовать систему накопления опыта для уровня, и мне нужно: У меня есть переменная exp на...

Одновременная работа двух ProgressBar'ов.
Всем добрый день! Никак не могу найти решение задачи или хотя бы подсказку. В общем есть ProgressBar1, который запускается кнопкой...

Совместная работа ProgressBar и BackgroundWorker
Долгое время уже мучаюсь с этим прогресс баром, который связан с backgroundWorker'oм. Пробовал разные варианты, как это сделать, но......

Работа ProgressBar в отдельном потоке
Привет. Подскажите, как заполнять и обновлять progressBar в отдельном потоке в процессе вычислений? У меня вычисления происходят в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru