0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 8

Использование BackgroundWorker без Sleep()

04.11.2013, 13:51. Показов 3053. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня такая проблема: есть progressbar который долго заполняется; я хочу выходить из программы при нажатии кнопки, но кнопка работает, только если в основном потоке есть Thread.Sleep(arg). Как можно обойтись без слипа, а то он, понятное дело, жутко всё замедляет?
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
private void button1_Click(object sender, EventArgs e)
        {
            if (backgroundWorker1.WorkerSupportsCancellation == true)
            {
                // Cancel the asynchronous operation.
                backgroundWorker1.CancelAsync();              
            }                         
        }
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
 
            BackgroundWorker worker = sender as BackgroundWorker;
            progressBar1.Maximum = 1000000;
            
            for (int j = 1000000; j >= 0; j--)
            {
                //Thread.Sleep(1);
                if (worker.CancellationPending == true)
                {
                    e.Cancel = true;
                    Application.Exit();
                }
                else
                {
                    worker.ReportProgress(progressBar1.Maximum - j);
                }
            }
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.11.2013, 13:51
Ответы с готовыми решениями:

использование backgroundworker
Здравствуйте! У меня имеется некоторая задача.......есть файлы больших размеров, нужно их открывать, чтобы не было зависаний и потом в...

Дождаться выполнения Task без Thread.Sleep?
using System; public class Test { public static void Main() { Console.WriteLine("1"); var task = new...

Тестирование клиент-серверного приложения без Thread.Sleep ?
Есть пока что небольшой вебсокет-сервер. При покрытии этого сервера NUnit-тестами передо мной встал вопрос: а как собственно правильно...

20
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.11.2013, 17:55
Студворк — интернет-сервис помощи студентам
Может прогрессу поставить максимумом 100, и в процессе выполнения вычислять процент выполнения и его сообщать? Я вижу это самым логичным способом. Ну пусть не 100, любое число, лишь бы это не было сообщениям интерфейсу на каждом мелком шаге выполнения операции. Вообще смысл использования другого потока немного теряется (всё равно окно жёстко виснет, и не отвечает), если сообщать так часто о прогрессе выполнения. Так-то в цикле с миллионом итераций всё ясно. Но в реальной задаче ты же не сможешь пропускать всегда одинаковое число итераций или что там будет. Вот и вычисляй процент выполнения всей задачи, этот процент и передавай.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.11.2013, 17:55

Срабатывание программы в зависимости от времени без цикла и Sleep
Доброго времени. Код простой, раз в 4 часа в 1:58, 5:58, 9:58, 13:58, 17:58 и 21:58 выполняет некую программу (// do stuff). Код мне...

Как сделать паузу без подвисания и без вызова Sleep?
Здравствуйте, как можно сделать паузу без "второго" потока и вешания программы посредством System.Threading.Thread.Sleep? ...

Использование sleep
Builder 6.0 Создаю .cpp файл, sleep в нем не работает. Выдает ошибку "нет прототипа". Создаю .c файл, sleep в нем работает. В чем...

Использование компонента backgroundworker
Захотел реализовать прогрессбар на трудоемкой задаче, захотел чтобы логика была такая: прогрессбар заполняется по ходу выполнения задачи,...

Использование функции Sleep
Доброго времени суток всем. Столкнулся с проблемой следующего характера: Есть функция, которая проверяет условие, если условие истина -...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Опции темы

Новые блоги и статьи
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 и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru