|
1 / 1 / 0
Регистрация: 11.05.2022
Сообщений: 28
|
|||||||||||
Данные из другого потока, mvvm08.12.2022, 22:59. Показов 1491. Ответов 26
Метки нет (Все метки)
Здравствуйте
Помогите, плизз, мне решить задачку. Я бы хотел, в рамках патnерна mvvm, реализовать следующее: ViewModel в конструкторе запускает поток, который ждет данные по TCP/IP. Затем эти данные обрабатываются и отображаются
Вместо Thread я попытался использовать BackgroundWorker, но получил стандартную ругань: доступ к контролу не из потока Dispatcher
0
|
|||||||||||
| 08.12.2022, 22:59 | |
|
Ответы с готовыми решениями:
26
[mvvm] Привязка данных которые изменяются из другого потока Не работает (видимо) байндинг при добавлении в коллекцию из другого потока (MVVM) Как изменить данные UI формы из другого потока |
|
1 / 1 / 0
Регистрация: 11.05.2022
Сообщений: 28
|
|||||||||||
| 12.12.2022, 23:04 [ТС] | |||||||||||
|
Здравствуйте
Элд Хасп, благодарю, что уделяете внимание мне ![]() Общая суть: есть модуль 'ReaderRS' - считывает пакеты из RS-каналов и формирует таблицы, есть модуль 'ReadDB' - который считывает и раздает в такте пакеты Opereator-ам , которые могут быть как удаленно, так и на одной машине (Astera). Сперва, как я предлагаю, регистрируются операторы - 'Operator_registration', заполняющая форму оператора. Эта таблица формируется на всех машинах операторов. Забегая вперед по пунктам, эта программа также редактирует и удаляет записи операторов:
0
|
|||||||||||
|
Модератор
|
||
| 13.12.2022, 00:35 | ||
|
MacksTiger, приглашение получил и принял.
Со временем в рабочие дни - очень туго. Как будет - посмотрю. Возможно накидаю пример. Пока попробуйте сами внести изменения о которых я писал в прошлом сообщении. Эти Операторы, их проверка - относятся к БЛ и очень сильно влияют на архитектуру данных. А использование списка и двух константных операторов требуют совершенно разной архитектуры данных. При смене архитектуры весь смысл отладки теряется. Поэтому даже если вы хотите отладить без БД, то всё равно должны формироваться не константные операторы, а список операторов. Соответственно условие их проверки тоже должно быть по списку. И ключ-имя (который вы используете в семафоре) должно быть частью состояния Оператора, а не константой в коде. Сами семафоры следует, как минимум, заменить на мютексы. И то, только при условии что допускается работа одного и того же оператора (вернее под его именем) одновременно на разных компах. Если не допускается, то всё это нужно просто выкинуть. Если нужна проверка по всей сети, то делать это нужно только через сервер. А эти семафоры (или мютексы) только запутывают код и сбивают с толку.
0
|
||
|
Модератор
|
|
| 13.12.2022, 20:30 | |
|
MacksTiger, в классе CStatus свойства какие значения могут принимать?
Как стринги в нём очень криво смотрятся. Добавлено через 1 минуту Особенно byte Status.Добавлено через 4 минуты В классе RWStatusSett не должно быть ни каких MessageBox. Исключения надо оставить как есть. Пусть их отлавливает тот кто вызывает его методы.
0
|
|
|
1 / 1 / 0
Регистрация: 11.05.2022
Сообщений: 28
|
||||
| 13.12.2022, 23:34 [ТС] | ||||
|
Здравствуйте
0
|
||||
|
Модератор
|
||||
| 14.12.2022, 01:35 | ||||
|
Я в принципе так и думал. Но вам нужно 3-5 значений. А вы задаёте целый байт. В таких случаях применяется два решения: 1) Status - имеет тип перечисления. Перечисление удобно тем, что его можно интерпретировать как строку и как инт. Но изменить перечисление без новой сборки приложения не получится.; 2) Status - это отдельный тип с Id и строкой значения. Список всех возможных статусов получается из отдельной таблицы БД. Эта реализация чуть сложнее, но позволяет изменять набор допустимых статусов без пересборки приложения. Во "взрослых" решениях (например, сервер биржи) применяется именно такая реализация. Часть логике работы с БД останется за вами. Здесь я знаю только общие принципы. Если вам понадобятся какие-то тонкости, то придётся обращаться в раздел ADO. И сделал небольшой рефакторинг. На данный момент в решении созданы два репозитория RWOperatorSett и RWStatusSett. Возможно в них ещё добавятся другие методы, но для начала получено некое разделение. Нужны Операторы обращаемся к RWOperatorSett, нужны статусы - к RWStatusSett. Токо названия избыточные. Понятнее будет OperatorsSet и StatusesSet. Добавлено через 3 минуты Эти два репозитория объединим под "одной крышей". Для чего это приложения, чем управляют операторы? Вот по предметной области и назовите. В этом типе будет приватное поле со строкой соединения и, пока, два репозитория. Добавлено через 9 минут Следующий шаг - нужно получить рабочий сеанс. Я не совсем представляю как это реализовать на уровне БД, но примерно по логике должно быть такое: 1) Получили всех операторов; 2) У каждого оператора есть свойство указывающего есть ли у него действующий сеанс; 3) Показываем всех операторов, но выбрать можно только тех у которого нет рабочего сеанса; 4) Для выбранного оператора происходит запрос на создание сеанса; 5) Происходит перепроверка сеанса в БД. Если его до сих пор нет, то создаётся для этого оператора. Это должно происходить в одной транзакции, чтобы не было конфликта при одновременном создании двух сеансов; 6) После успешного создания, он запоминается в Модели. Представление получив событие об этом закрывает Окно (или страницу) авторизации и переходит к рабочему Окну. 7) Если создание сеанса не успешно, то выводится сообщение о причине провала. И юзер может выбрать другого оператора. Добавлено через 2 минуты Здесь нужно учесть один нюанс. При корректном выходе из приложения, сеанс в БД будет закрыт или удалён. А вот при некорректном? Вырубился комп, обрыв соединения? То есть нужен какой-то механизм сброса сеанса для таких случаев.
1
|
||||
|
1 / 1 / 0
Регистрация: 11.05.2022
Сообщений: 28
|
|||
| 15.12.2022, 19:10 [ТС] | |||
|
Здравствуйте
Я склоняюсь перейти та такую структуру: модуль 'ReaderRS', модуль ServerOperator&DB (бывший 'ReadDB') и Operator-ы. Где все взаимодействие будут такими: 'RS'->ReaderRS->DB DB<->ServerOperator&DB<-TCP/IP->Operator-ы Сделаю наброски 'ServerOperator&DB' и выложу в git Добавлено через 3 минуты P.S.
0
|
|||
|
Модератор
|
||
| 15.12.2022, 19:22 | ||
|
Моих знаний хватит только для общего, поверхностного понимания, что нужно сделать. Создайте там тему. В ней дайте ссылку на эту тему. И опишите проблему (если я правильно понимаю) примерно так: - есть такая-то БД на сервере в локалке; - с ней могут работать одновременно разные операторы; - любой оператор может работать с любого компа; - на любом компе может быть открыто одновременно несколько сеансов для разных операторов; - один оператор может открывать одновременно только один сеанс во всей локалке. Необходимо: - получение списка операторов и у каких из них нет открытых сеансов; - создание сеанса для выбранного оператора, если это возможно; - корректно завершение сеанса в случае сбоев на локальном компе или в локальной сети. Естественно несколько подробнее, с деталями реализации имеющими существенное значение.
1
|
||
| 15.12.2022, 19:22 | |
|
Помогаю со студенческими работами здесь
27
MVVM - Как в UserControl передавать данные с другого UserControl Как получить данные из другого потока? Как вывести данные в textbox из другого потока? Как из одного потока узнать состояние другого потока Получить данные от ComboBox из другого потока Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
|
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
|
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика
Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
|
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации:
В классе Работник добавить:
накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни
коэффициентПрезентеизма — снижает продуктивность. . .
|
|
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день.
Для работы необходим браузер,. . .
|
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности
Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано.
. . .
|
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
|
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива
Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
|