Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/32: Рейтинг темы: голосов - 32, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 25.05.2018
Сообщений: 100

"Зависание формы" при выполнение операций - как избежать?

17.03.2021, 18:54. Показов 7272. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Такой вопрос , как можно избежать "зависание" формы при выполнение какой нибудь долго выполняющей операций, к примеру чтение файла(ов) или выполнение расчетов , которое требует времени ?
А то считываю большой файл и форма - как бы зависает при чтение ..
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.03.2021, 18:54
Ответы с готовыми решениями:

Зависание формы при потере фокуса при выполнении в ней фоновых операций
Здравствуйте, коллеги. Возник следующий вопрос, который не получается решить самостоятельно. Информации по нему найти не удалось,...

Как избежать мерцания при перетаскивании формы
Пользуясь случаем Вы не подскажите как избедать мерцания при перетаскивании формы своими силами??? Блин, я помню, что когда то решал эту...

Как избежать зависания формы при использовании n потоков?
Здравствуйте. У меня есть код, в котором выполняется ёмкий цикл, чтобы не зависала форма я его запускаю отдельным потоком(bw), но если я...

41
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
03.04.2021, 16:50
Лучший ответ Сообщение было отмечено mine1 как решение

Решение

Студворк — интернет-сервис помощи студентам
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
using System;
using System.IO;
using System.Security.Cryptography;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Sha256HashExample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        // на форме размещены 1 Botton, 3 Label'а и 1 OpenFileDialog
        private async void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() != DialogResult.OK)
                return;
 
            label1.Text = openFileDialog1.FileName;
 
            IProgress<int> progress = new Progress<int>((p) => label2.Text = p.ToString());
 
            button1.Enabled = false;
 
            byte[] hash = await Task.Run(() => ComputeSha256(openFileDialog1.FileName, progress));
 
            button1.Enabled = true;
 
            label3.Text = BitConverter.ToString(hash).Replace("-", "");
        }
 
        private static byte[] ComputeSha256(string filePath, IProgress<int> progress)
        {
            byte[] buffer = new byte[4 * 1024];
 
            using (var file = File.OpenRead(filePath))
            using (var hasher = SHA256.Create())
            {
                int numRead;
                long numReadTotal = 0, fileLen = file.Length;
                do
                {
                    numRead = file.Read(buffer, 0, buffer.Length);
                    numReadTotal += numRead;
                    hasher.TransformBlock(buffer, 0, numRead, null, 0);
                    progress.Report((int)(numReadTotal * 100 / fileLen));
                }
                while (numRead != 0);
                hasher.TransformFinalBlock(buffer, 0, 0);
                return hasher.Hash;
            }
        }
    }
}
1
1 / 1 / 0
Регистрация: 25.05.2018
Сообщений: 100
03.04.2021, 18:31  [ТС]
Someone007, Если честно, я немного в шоке. Люблю сам писать коротко чтоб было, и не размазывать код, ну здесь нет слов. Коротко, просто и всё понятно.
Хотя для меня некоторые вещи в Си после VB6 , всё равно еще в диковинку , к примеру это :
Цитата Сообщение от Someone007 Посмотреть сообщение
await Task.Run(() =>
Да и не только ..
Спасибо ..
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
03.04.2021, 22:06
Лучший ответ Сообщение было отмечено mine1 как решение

Решение

Цитата Сообщение от mine1 Посмотреть сообщение
к примеру это
Лямбда-выражения

Добавлено через 1 час 29 минут
То же самое можно и без лямбд написать...

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
using System;
using System.IO;
using System.Security.Cryptography;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Sha256HashExample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        // на форме размещены 1 Button, 3 Label'а и 1 OpenFileDialog
        private async void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() != DialogResult.OK)
                return;
 
            label1.Text = openFileDialog1.FileName;
 
            void ShowProgress(int pct)
            {
                label2.Text = pct.ToString();
            }
 
            IProgress<int> progress = new Progress<int>(ShowProgress);
 
            button1.Enabled = false;
 
            byte[] hash = await ComputeSha256(openFileDialog1.FileName, progress);
 
            button1.Enabled = true;
 
            label3.Text = BitConverter.ToString(hash).Replace("-", "");
        }
 
        private static async Task<byte[]> ComputeSha256(string filePath, IProgress<int> progress)
        {
            using (var file = File.OpenRead(filePath))
            using (var hasher = SHA256.Create())
            {
                byte[] buffer = new byte[4 * 1024];
                int numRead;
                long numReadTotal = 0, fileLen = file.Length;
                do
                {
                    numRead = await file.ReadAsync(buffer, 0, buffer.Length);
                    numReadTotal += numRead;
                    hasher.TransformBlock(buffer, 0, numRead, null, 0);
                    progress.Report((int)(numReadTotal * 100 / fileLen));
                }
                while (numRead != 0);
                hasher.TransformFinalBlock(buffer, 0, 0);
                return hasher.Hash;
            }
        }
    }
}
1
1 / 1 / 0
Регистрация: 25.05.2018
Сообщений: 100
03.04.2021, 22:31  [ТС]
Someone007, а тут вот такое с вашим кодом с лямбд -выражениями соорудил , прикрепил проект. Сразу говорю написал - как умею %))
Я наверное почему отказался от Потоков и Асинхронности , что они требуют уже Net.Framework 4(!) и выше..
кстати оказалось с некоторыми вещами , очень просто. Надо просто потренироваться с ними. Спасибо, еще раз !!!
Вложения
Тип файла: zip WindowsFormsApp1.zip (560.0 Кб, 29 просмотров)
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
03.04.2021, 22:36
Цитата Сообщение от mine1 Посмотреть сообщение
что они требуют уже Net.Framework 4(!) и выше..
Так это же хорошо... Больше возможностей доступно.
0
1 / 1 / 0
Регистрация: 25.05.2018
Сообщений: 100
03.04.2021, 22:47  [ТС]
Someone007, это да , просто по старинке чтоли привык , а так же привязок к дополнениям было меньше.
Плюс конечно же и ОС старые учитываю,да и сам до недавнего времени на ХР был %))
Цитата Сообщение от Someone007 Посмотреть сообщение
await ComputeSha256(
или это
Цитата Сообщение от Someone007 Посмотреть сообщение
IProgress<int> progress = new Progress<int>(ShowProgress);
И вот это меня сбило с толку , я так понимаю код как бы выполняется постоянно чтоль . Это тоже понять не могу и привыкнуть, привык что написал команду код выполнился и остановился в этом же месте . А здесь как то не так уже. Вот с этим у меня еще проблемы.
0
Эксперт .NET
 Аватар для Usaga
14790 / 9564 / 1367
Регистрация: 21.01.2016
Сообщений: 36,060
04.04.2021, 08:27
Цитата Сообщение от mine1 Посмотреть сообщение
Плюс конечно же и ОС старые учитываю,да и сам до недавнего времени на ХР был %))
Не надо их учитывать. Сам .NET Framework уже считается устаревшим, ему на смену .NET Core пришел. Что уж говорить про древнючий .NET Framework 4.0...
0
1 / 1 / 0
Регистрация: 25.05.2018
Сообщений: 100
04.04.2021, 10:09  [ТС]
Usaga,
Цитата Сообщение от Usaga Посмотреть сообщение
.NET Framework уже считается устаревшим
Хотя я писал свой код , с поддержкой .Net Framework 2.0 , и пишу еще в MVS 2017 . Плюс комп уже морально устарел %))
Вот поэтому наверное я и как бы по старинке с "костылями" программирую - учусь итд...
А так это понятно , но для меня , с этими бы фишками разобраться сначала , а здесь я точно "утону в бездну" %))
Кликните здесь для просмотра всего текста

Вот еще проблема с переменными , если в VB6 я мог с одной переменной вытворять по много раз , а здесь уже не понятно. А то в С# и вообще в .Net , я так понимаю они могут как бы в каком то моменте пропадать(очищаться)- это для меня ужас какой то , не понятно иногда , когда такое может произойти. А так еще много для меня непоняток с теми же к примеру переменными , как их правильно объявить итд..


Спасибо , и Wolfdp, за код !!!
0
Эксперт .NET
 Аватар для Usaga
14790 / 9564 / 1367
Регистрация: 21.01.2016
Сообщений: 36,060
04.04.2021, 10:16
Цитата Сообщение от mine1 Посмотреть сообщение
Хотя я писал свой код , с поддержкой .Net Framework 2.0
Зачем?)
0
1 / 1 / 0
Регистрация: 25.05.2018
Сообщений: 100
04.04.2021, 10:22  [ТС]
Usaga,
Цитата Сообщение от mine1 Посмотреть сообщение
MVS 2017 . Плюс комп уже морально устарел %))
Может из за этого %))
Не знаю , мож пока бы с этим еще разобраться по простому, а мож еще из за комп-а.

Добавлено через 29 секунд
Цитата Сообщение от mine1 Посмотреть сообщение
а так же привязок к дополнениям было меньше.
И это тоже как бы учитывал .
0
Эксперт .NET
 Аватар для Usaga
14790 / 9564 / 1367
Регистрация: 21.01.2016
Сообщений: 36,060
04.04.2021, 10:27
mine1, что за дополнения?
0
1 / 1 / 0
Регистрация: 25.05.2018
Сообщений: 100
04.04.2021, 10:37  [ТС]
Usaga, ну как бы общим словом обозвал там .Net новые версии итд , в этом смысле , плюс там всякие пакеты где используются уже сами ДЛЛки , как дополнение для работы. Наверное как то так ...
0
Эксперт .NET
 Аватар для Usaga
14790 / 9564 / 1367
Регистрация: 21.01.2016
Сообщений: 36,060
04.04.2021, 10:46
mine1, и что в этом плохого?
0
1 / 1 / 0
Регистрация: 25.05.2018
Сообщений: 100
04.04.2021, 10:53  [ТС]
Usaga, Ну без установки доп. софта , даже того же Framework-а , программа то не запуститься , то есть надо есть его нет, искать скачивать. А так по простецки запустил без всякого лишнего и работает. Мож так еще ..Хотя иногда эти вещи просто необходимы.
0
Эксперт .NET
 Аватар для Usaga
14790 / 9564 / 1367
Регистрация: 21.01.2016
Сообщений: 36,060
04.04.2021, 11:13
mine1, какого ещё доп софта? Вы содержимое папки bin\Release просто копируете и всё. Из необходимых реквизитов - только .NET Framework нужной версии и всё. Вы хоть для одной программы какие-то библиотеки докачивали руками?)
0
1 / 1 / 0
Регистрация: 25.05.2018
Сообщений: 100
04.04.2021, 11:31  [ТС]
Usaga, но это да. А так бывало, что и того же нет .NET Framework нет под рукой , особенно когда ОС свежая %))
Ладно, на самом деле фигня это всё и мелочи. Мне бы с этими фишками - разобраться бы, а потом уже на более серьезное переходить.

Добавлено через 3 минуты
А то уже от этих фишек "голова немного пухнет" , а здесь еще, что то новое %))
С этим бы разобраться , потом уже за другое браться. Ладно , спасибо ..
0
1 / 1 / 0
Регистрация: 25.05.2018
Сообщений: 100
05.04.2021, 11:03  [ТС]
ну вот и попал на "первые грабли" ..
Как передать из метода несколько байтовых значение
эта строчка :
Цитата Сообщение от Someone007 Посмотреть сообщение
C#
1
return hasher.Hash;
Здесь надо в массиве передать ..
Написла вот так :
C#
1
2
                byte[][] HashAll = {hashMD5.Hash, hashSHA1.Hash, hashSHA256.Hash };
               return HashAll[]; .. Здесь ругается на синтаксис.
А как правильно вернуть несколько байтовых значений в массиве(!) через
C#
1
return
?
Что в интернете находил там , есть что то - но или по строками или простыми числами или ... не то..

P.s. Решил здесь напитать , чтоб далеко не отходить от темы и примера. Сорри ...
0
Эксперт .NET
 Аватар для Usaga
14790 / 9564 / 1367
Регистрация: 21.01.2016
Сообщений: 36,060
05.04.2021, 11:15
Цитата Сообщение от mine1 Посмотреть сообщение
А как правильно вернуть несколько байтовых значений в массиве(!) через
Завести класс с понятными и говорящими названиями свойств, присвоить этим свойствам нужные значения и вернуть из метода.
0
1 / 1 / 0
Регистрация: 25.05.2018
Сообщений: 100
05.04.2021, 12:19  [ТС]
Usaga, ну хоть привели пример бы , хотя бы на том же return , как правильно расписать.
А так я решил вот так сделать :
C#
1
2
                string[] HashAll = { BitConverter.ToString(hashMD5.Hash).Replace("-", ""), BitConverter.ToString(hashSHA1.Hash).Replace("-", ""), BitConverter.ToString(hashSHA256.Hash).Replace("-", "") };
                return HashAll;
Не знаю только правильно ли такое решение или .. Вообщем прикрепил проект с решением на дополнительный вопрос %))
Еще раз Спасибо Someone007, за предоставленный пример кода ..
Вопрос закрыт ...
Вложения
Тип файла: rar WindowsFormsApp1AllHash.rar (256.4 Кб, 15 просмотров)
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
05.04.2021, 14:26
Лучший ответ Сообщение было отмечено mine1 как решение

Решение

Можно возвращать tuple или как предложили выше создать дополнительный класс с нужными полями

C#
1
2
3
4
5
private static async Task<(byte[],byte[],byte[])> ComputeSha256(string filePath, IProgress<int> progress)
{
    // ???
    return (hasher.Hash, hasher2.Hash, hasher3.Hash);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2021, 14:26

Как избежать запуска формы при запуске программы?
Здравствуйте. Поделитесь знанием пожалуйста, как можно скрыть форму, её визуал после запуска программы? Чтобы она просто работала в фоне

Выполнение фоновых операций без зависания формы
Здраствуйте, к примеру есть какойто метод, который, например, что то делает на протяжении 3 секунд, все это время форма будет в режиме...

Выполнение операций сразу после появления формы
Доброго времени суток Такая вот проблема возникла. Имеется форма 1 в которую вводится фамилия (Прикладываю скрин). Фамилия...

Выполнение фоновых операций без зависания формы
Здравствуйте, не думал, что такой вопрос возникнет, ибо думал, что знал путь решения, однако... Есть метод, допустим, такой: public...

Как предотвратить зависание формы при get запросе?
Делаю простой get запрос через TIdHTTP, но при этом зависает форма до того как придет ответ от сервера. Как сделать чтобы чтобы в этот...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru