|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||||||||||||||||||||||
Бесконечный цикл c Timer start/stop14.05.2021, 18:42. Показов 6968. Ответов 29
Метки нет (Все метки)
Создал таймер.
При такой реализации у меня бесконечный цикл "блокирует" основной UI поток. Вопрос весьма простой: как я могу не блогировать UI поток этим вечным циклом, при этом используя Timer? Я бы мог сделать асинхронно или чере Task.Run() и т.д., но как я знаю Timer сам по себе поток. Есть пример, но он не абстрактный, а под WinForms, я пытаюсь сделать так, чтобы он был как отдельный, не зависящий от UI проект. Пример WinForms: Кликните здесь для просмотра всего текста
0
|
||||||||||||||||||||||||||
| 14.05.2021, 18:42 | |
|
Ответы с готовыми решениями:
29
Суть методов Start и Stop класса Timer
Бесконечный цикл |
|
Модератор
|
|||||
| 18.05.2021, 10:55 | |||||
|
В Формах скорее всего вы всё реализовывали в Code Behind и всё работало в одном потоке. Из-за быстроты отработки метода вы просто не замечали, что Форма на доли секунды подвисает. Добавлено через 1 минуту Calculate?Как он связан с кнопкой, её командой?
1
|
|||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||||||
| 18.05.2021, 13:32 [ТС] | ||||||||||
Я о том, что в формах кнопка не блокируется. Там есть лог, в который выводит информацию. И я вижу, что нажатие кнопки обрабатывается ошибкой в лог. У меня же тоже ошибка, такая же, но спустя пару кликов он падает, в отличие от того, который в формах.
Добавлено через 2 часа 21 минуту Элд Хасп, Execute мне не помог. Дело не в нём. Ошибка происходт, когда я отправляю сам запрос в валидатор.
Я попробовал создать статическую переменную private static object locker = new object();и отправку команды упаковал туда:
0
|
||||||||||
|
Модератор
|
|||||||
| 18.05.2021, 13:38 | |||||||
|
Для "быстрых" методов часто используется. Но судя по коду у вас проблема с потокбезопасностью m_eSSP.Поэтому всюду где обращаетесь в коде модели к этому объекту делайте локирование по нему:
locker не стоит в этом случае использовать.
1
|
|||||||
|
Модератор
|
|
| 18.05.2021, 13:59 | |
|
limeniye, хотя может ошибаюсь.
SendCommand - это команда Модели или VM? По идее в Модели у вас должен быть некий объект отвечающий за связь с монетоприёмником. Вот для потокобезопасности перед обращением к этому объекту и надо делать (в Модели) локирование по нему. По этой причине для работы с ОДНИМ монетоприёмником должен создаваться только ОДИН объект. Если в конфигурации компьютера предусматривается подключение только одного монетоприёмника, то Singleton идеально подходит.
1
|
|
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||
| 18.05.2021, 15:53 [ТС] | ||||
|
0
|
||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||
| 18.05.2021, 16:31 [ТС] | ||
|
Но я думаю там всё безопасно должно быть, учитывая то, что там Mutex, Таймер и локирование запроса. Или этого недостаточно?
0
|
||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 18.05.2021, 17:34 [ТС] | |
|
Элд Хасп, а, Вы в этом плане. Я думал при условии, если валидаторы разные(следовательно и классы разные).
Хм. Я думал достаточно просто удалить Singlton и всё будет работать корректно. Как же тогда делать синхронизацию потока?
0
|
|
|
Модератор
|
||
| 18.05.2021, 18:08 | ||
|
А делать потокобезопасный доступ к устрорйству. Чтобы к нему можно было обратиться из любого потока. Добавлено через 5 минут Условно. У вас устройство подсоединено к какому-то порту с такими-то параметрами. Создаёте экземпляр Модели для работы с ним. Модель сохраняется в статическом свойстве. При попытке следующего создания экземпляра возвращается или ранее созданный экземпляр, или выкидывается исключение - вариант определяется условиями ТЗ. В самой Модели есть несколько методов для работы с устройством. Если они все работают быстро (доли секунды), то во всех методах перед обращением устройству сначала происходит его локирование. Так как к устройству может обращаться только одна Модель, то обеспечит потокобезопасность.
0
|
||
| 18.05.2021, 18:08 | |
|
Бесконечный цикл Бесконечный цикл Бесконечный цикл
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запрет дублирования строк в табличной части
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) активировать флаг. . .
|
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|