Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
7 / 7 / 3
Регистрация: 16.04.2015
Сообщений: 175
.NET 3.x

Временно приостановить выполнение событий

24.09.2015, 15:04. Показов 3665. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача следующая:
Во время длительной загрузки пользователь может тыкать в экран. По окончании загрузки появляются скрытые контролы на текущей форме или открывается новая форма и начинается обработка всех скопившихся событий кликов применительно к новым контролам.
Как этого избежать?
Пробовал:
C#
1
2
3
this.SuspendLayout();
...
this.ResumeLayout(false);
Не помогло.

Пробовал:
C#
1
2
3
4
5
6
7
8
9
foreach (Control cntr in this.Controls)
{
    cntr.SuspendLayout();
}
...
foreach (Control cntr in this.Controls)
{
    cntr.ResumeLayout(false);
}
Результат тот же.

Есть у кого какие мысли на этот счёт?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2015, 15:04
Ответы с готовыми решениями:

Приостановить выполнение, пока не отреагирует пользователь
Подскажите как можно приостановить выполнение метода, пока не среагирует пользователь? Вот пример: using System; using...

Приостановить выполнение программы пока не сработает таймер n раз
Имеется вот такой обработчик события Tick: private void tmr_Tick(object sender, EventArgs e) { if (kol...

Приостановить выполнение одного приложения до окончания выполнения любого другого
Добрый вечер! Подскажите, что лучше использовать, чтобы приостановить выполнение одного приложения, до окончания выполнения любого другого?...

45
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
25.09.2015, 12:21
Студворк — интернет-сервис помощи студентам
DMF, а почему не выполнять код обработчика не в UI потоке? Может с этим связано? Как вообще у тебя прогресс бар вращается, если UI поток должен намертво зависнуть?
0
7 / 7 / 3
Регистрация: 16.04.2015
Сообщений: 175
25.09.2015, 13:16  [ТС]
Someone007, потому что алгоритм выполнения следующий:
Цитата Сообщение от DMF Посмотреть сообщение
Прога сперва полностью выполняет код - метод загрузки(выключение "нажатий", загрузка и обработка данных, включение "нажатий"), выполнение событий.
Добавлено через 2 минуты
Цитата Сообщение от Casper-SC Посмотреть сообщение
а почему не выполнять код обработчика не в UI потоке?
Тоже вариант. Надо пробовать. Но это не снимает вопроса при открытии окон...
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
25.09.2015, 13:20
Значит у вас логика в программе некорректная просто, и вы не там ищите проблему.
1
7 / 7 / 3
Регистрация: 16.04.2015
Сообщений: 175
25.09.2015, 13:55  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
и вы не там ищите проблему.
И где же её искать?
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
25.09.2015, 14:00
Цитата Сообщение от DMF Посмотреть сообщение
И где же её искать?
Без исходников на какой ответ ты надеешься? . Часто, кстати, именно так и бывает, что проблему человек вообще не там ищет.
0
7 / 7 / 3
Регистрация: 16.04.2015
Сообщений: 175
25.09.2015, 14:25  [ТС]
Casper-SC, это понятно.
Не понятно другое. Что значит "логика в программе некорректная"?
Неправильное построение алгоритма программы? На алгоритмы компиляции и выполнения я же не могу влиять.
Может неправильность логики заключается в отсутствии потоков у меня?

Добавлено через 2 минуты
П.С.: Простите за наивность, но это первая моя программа и я могу многое не учесть. Объясните, пожалуйста, дураку.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
25.09.2015, 18:43
Цитата Сообщение от DMF Посмотреть сообщение
Может неправильность логики заключается в отсутствии потоков у меня?
И в пихании всего подряд в один огромный метод.

Именование транслитом это вообще не хорошо. И не надо говорить, что я якобы не знаю английский (речь о тебе). По чуть-чуть учи язык. С помощью переводчика, знания элементарных правил английского строишь названия методов, свойств и т.д. Сразу заставь себя делать правильно.

Без понимания твоих задач вообще ничего тебе толкового сказать нельзя. Но есть подозрение, что ты решаешь их не совсем верно. К примеру, о потоках. Ты выкладывал код, в котором явно видно, что UI просто должен намертво зависнуть, если операции выполняются долго. Долго может быть и 50 мс, так что это понятие растяжимое и в зависимости от контекста (предмета разговора) может иметь разное кол-во мс

Добавлено через 2 минуты
Так же, возможно, к примеру, ты в другом месте чего-то там намутил, что из-за того другого места у тебя сейчас такие глюки, а ты ищешь их не в том месте. Об этом была речь выше в прошлых сообщениях.
0
7 / 7 / 3
Регистрация: 16.04.2015
Сообщений: 175
28.09.2015, 08:50  [ТС]
Casper-SC, я не якобы знаю Английский, а названия пишу максимально понятные для восприятия, не только меня. Здесь, на работе, все вообще на русском все переменные пишут. Может конкретней напишешь в чём смертный грех транслитерации?
Цитата Сообщение от Casper-SC Посмотреть сообщение
UI просто должен намертво зависнуть
Т.е., он не должен зависать? В чём проблема с "зависанием"? Пользователь у меня видит что идёт загрузка, т.е. тупо замирания и полного отсутствия движения у меня нет. Так в чём же дело?
Кстати, если я загрузку распихаю по разным методам, разве от этого все действия в сумме будут выполняться быстрее? Да и какой смысл разбивать на части одно целое логическое действие, тем более, что отдельные его части более нигде в коде не повторяются?

Добавлено через 22 минуты
П.С.: А что даст выполнение загрузки в потоке? Всё-равно же как-то надо блокировать действия пользователя? Или использовать глобальные флаги?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
28.09.2015, 09:30
Цитата Сообщение от DMF Посмотреть сообщение
Здесь, на работе, все вообще на русском все переменные пишут.

Не по теме:

Все посоны, расходимся :D

1
28.09.2015, 09:52  [ТС]

Не по теме:

Цитата Сообщение от Storm23 Посмотреть сообщение
Все посоны, расходимся
Раз уж умного написать ничего не в состоянии, тогда конечно - лучше "разойтись"... :D

0
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
28.09.2015, 10:49
DMF, будет правильно, если ты покажешь исходники и укажешь на место загрузки данных, и место, где возникают проблемы. Сейчас это гадание на буквах форума.
0
7 / 7 / 3
Регистрация: 16.04.2015
Сообщений: 175
28.09.2015, 11:14  [ТС]
BozKurt, выборочно или весь проект? Весь - это немало...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
28.09.2015, 11:30
DMF, вам же сказали. Уберите всю многопоточность и асинхронность - поток сам будет вешать форму при выполнении длительной операции. Минус один - отменить её тоже не получится.

Не по теме:

Цитата Сообщение от DMF Посмотреть сообщение
Здесь, на работе, все вообще на русском все переменные пишут.
Мде, бывают жизни огорчения...

0
7 / 7 / 3
Регистрация: 16.04.2015
Сообщений: 175
28.09.2015, 11:37  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
Уберите всю многопоточность и асинхронность
Так сейчас всё и так выполняется в одном базовом потоке. В цикле только метод Update() пользую для отображения статуса загрузки.

Добавлено через 48 секунд
П.С.: Сделал через потоки - та же байда.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
28.09.2015, 12:01
DMF, вот вам пример, искренне завидую если у вас получиться нажать на маленькие кнопки во время работы длительной операции
Вложения
Тип файла: zip FreezeTest.zip (48.3 Кб, 3 просмотров)
0
7 / 7 / 3
Регистрация: 16.04.2015
Сообщений: 175
28.09.2015, 13:29  [ТС]
Psilon, то же самое, что и у меня. Прекрасно нажимается. Только срабатывает не в момент выполнения "длительной операции", а сразу по её завершении. Точь-в-точь как у меня.
П.С.: А если на кнопки не ставить события нажатия, так они вообще никогда не сработают, даже в режиме бездействия.
Вложения
Тип файла: rar FreezeTest2.rar (50.0 Кб, 2 просмотров)
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
28.09.2015, 13:51
Вот так ничего не срабатывает если нажать во время выполнения операции.
Вложения
Тип файла: zip FreezeTest3.zip (53.8 Кб, 3 просмотров)
0
2 / 2 / 0
Регистрация: 29.12.2013
Сообщений: 128
28.09.2015, 14:49
Во время длительной загрузки пользователь может тыкать в экран. По окончании загрузки появляются скрытые контролы на текущей форме или открывается новая форма и начинается обработка всех скопившихся событий кликов применительно к новым контролам.
Как этого избежать?

DMF, для подсоса данных создавай отдельный поток и не заморачивайся.
0
7 / 7 / 3
Регистрация: 16.04.2015
Сообщений: 175
28.09.2015, 15:37  [ТС]
Цитата Сообщение от xinvestoriginal Посмотреть сообщение
создавай отдельный поток и не заморачивайся.
В том-то и беда, что после обработки потока один фиг срабатывают нажатия.

Добавлено через 27 секунд
Цитата Сообщение от Someone007 Посмотреть сообщение
Вот так ничего не срабатывает
Сейчас гляну..

Добавлено через 23 минуты
Someone007, что такое await и Task и чем их можно заменить в VS2008 и .NET CF v3.5
0
2 / 2 / 0
Регистрация: 29.12.2013
Сообщений: 128
28.09.2015, 15:39
Цитата Сообщение от DMF Посмотреть сообщение
В том-то и беда, что после обработки потока один фиг срабатывают нажатия.
они должны сразу срабатывать а не после окончания потока.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.09.2015, 15:39
Помогаю со студенческими работами здесь

Asp - приостановить выполнение страницы в определенном месте (на некоторое время)
Как в asp приостановить выполнение инструкций на некоторое время, (необходимо для проверки - закончил ли работу ActiveX) чтобы потом...

Как организовать выполнение событий из базы
Уважаемые! Есть такая задача. В Access базе лежит список событий, для каждого из которых указана точная дата действия (год, месяц,...

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

Классы Делегаты - выполнение сразу двух событий при запуске программы
Помогите разобраться в следующем. Сначала нужно создать один класс делегат, в них - метод обработки события. Событию назначается делегат....

Можно ли объединить выполнение двух различных событий?
Можно ли как-нибудь объединить выполнение двух различных событий? Допустим я реализовал перемещение рисунка на форме по нажатию стрелок...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru