Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
1181 / 623 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
1
.NET 6

Синхронизация событий, или синхронизация внутри событий

21.01.2022, 22:59. Показов 386. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вводная информация
Пользователь тыкае на кнопку --> понимается событие.
Каждое событие запускает анимацию.

Стандартный результат
Пользователь тыкнул 50 раз -- каждая анимация по 10 секунд, но все они выполняться, грубо говоря, одновременно, а учитывая то, что используют один и тот же объект для анимации -- начнётся каша.

Желаемый результат
Я хочу, чтобы анимации добавлялись в пулл анимаций и выполнялись последовательно. Нажал 50 раз? Будь добр -- ожидай 500 секунд.

В дальнейшем планируется ускорять анимации, если это не последняя.

Имеющееся решение
Метод анимации -- не Task, а обычный void.
реализации для void, под рукой, не было, но ради примера оставлю для Task. Смысл, думаю, понятен:
У метода есть порядковый номер и остальные методы ждут своей очереди*
(в данном случае -- задачи, но это не важно)
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
   public class SyncMethod
    {
        private int oldNumber = -1;
 
        public async Task WaitingAnotherMethodsAsync(int number, Func<Task> action, int milliseconds = 10000)
        {
            int timeout = 0;
            int еxpectedNumber = number - 1;
 
            while (oldNumber < еxpectedNumber && timeout < milliseconds)
            {
                timeout++;
                await Task.Delay(1);
            }
 
            if (oldNumber < еxpectedNumber)
            {
                throw new ArgumentException($"Error message: \"Message after the {oldNumber} was lost.\"");
            }
            else if (oldNumber > еxpectedNumber)
            {
                throw new ArgumentException($"Error message: \"Message after the {oldNumber} already finished.\"");
            }
            else
            {
                await action();
 
                oldNumber++;
                if (oldNumber != number)
                    throw new ArgumentException("Error message: \"Something wrong ;(((.");
            }
        }
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.01.2022, 22:59
Ответы с готовыми решениями:

Реализовать хранилище событий, для хранения событий в БД
Доброго дня! Поставлена задача реализовать хранилище событий, для хранения событий в БД) Событие...

Задачи на использование событий. Осуществить использование событий в программе с применением синтаксиса обработчика, рекомендованного для среды NET Fr
NET Framework. Программа для поиска простых чисел среди чисел Фибоначчи. При нахождении...

Синхронизация используя семафоры или мьютексы
Добрый день, добрые люди подскажите у меня есть 4 потока и в них выполняеться вычеление функции A=...

Синхронизация асинхронных событий в одном потоке
Добрый день! Работаю с веб сервисами. Столкнулся со следующей проблемой на стороне клиента: для...

Синхронизация скролов или готовый компонент notepad'a
Здравствуйте. Делаю свой Notepad. Скажите, &quot;зачем?&quot;, если есть уже Notepad++. На что я отвечу,...

0
21.01.2022, 22:59
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.01.2022, 22:59
Помогаю со студенческими работами здесь

Синхронизация потоков объекта событий
Здравствуйте задали задание сделать синхронизацию потоков с помощью объекта событий подскажите...

Синхронизация данных и цикл событий в Mojolicious
Допустим, несколько пользователей зашли на веб-сервер и каждый открыл страницу с данными. Далее,...

Синхронизация потоков через механизм событий. 2 процедуры с таймером
Помогите пожалуйста доделать программу в Delphi. Синхронизация потоков через механизм событий. 2...

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

Модуль EVO II синхронизация 50гц, На какой ножке контроллера синхронизация шим двигателя?
Частый дефект для модулей EVO II с коллекторным двигателем - нет управления двигателем при помехах...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Интеграция Arduino и ChatGPT: Практическое руководство
InfoMaster 16.01.2025
В современную эпоху технологических инноваций интеграция искусственного интеллекта с микроконтроллерами открывает принципиально новые возможности для создания умных устройств и автоматизированных. . .
Как создать робота, управляемого ChatGPT
InfoMaster 16.01.2025
Концепция проекта В современную эпоху искусственный интеллект и робототехника становятся все более доступными для энтузиастов и разработчиков. Создание роботизированной руки, управляемой ChatGPT,. . .
Как создать ChatGPT бота в Telegram на Python
InfoMaster 16.01.2025
В современном мире технологии искусственного интеллекта становятся все более доступными для разработчиков, открывая новые возможности для создания умных и интерактивных приложений. Одним из самых. . .
Машинное обучение с помощью Python
InfoMaster 16.01.2025
Машинное обучение стало неотъемлемой частью современных технологий, позволяя компьютерам учиться на основе данных и принимать решения без явного программирования. В сочетании с языком. . .
Использование связки C# и PHP в корпоративной разработке и микросервисной архитектуре
InfoMaster 16.01.2025
Введение в интеграцию C# и PHP В современной корпоративной разработке все чаще возникает потребность в создании гибких и масштабируемых решений, способных эффективно решать широкий спектр. . .
Как использовать Kerio дома для управления сетью и пользователями
InfoMaster 16.01.2025
Использование технологий для улучшения повседневной жизни стало неотъемлемой частью современного быта. Одной из таких технологий является Kerio — мощный инструмент для управления сетью и. . .
Есть ли будущее у DVD и Blu-ray?
InfoMaster 16.01.2025
В эпоху стремительного развития цифровых технологий и повсеместного распространения потоковых сервисов вопрос о будущем физических носителей информации становится все более актуальным. Особенно остро. . .
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru