Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3

Синхронизация Модели с UI потоком

09.01.2024, 12:06. Показов 2767. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Тема создана разделением исходной: Как определить из кода библиотеки Standard платформу приложения (Forms, WPF, UWP, Framework, Core и т.д.)?

Немного нубский вопрос -- насколько плохо считается прокидывать Dispatcher в модель/команду? Я просто сейчас для себя пишу WPF приложуху, и для отслеживания изменения не из UI потока прям в модель запихиваю диспетчер из окна/контролера. Я так понимаю желательно максимально отвязывать от UI модели/команды, но не особо представляю как это сделать малой кровью.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.01.2024, 12:06
Ответы с готовыми решениями:

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

Как обратиться к исходной модели моего класса из прокси-модели в pyqt5?
У меня есть модель my_model класса MyModelClass(QAbstractTableModel), у которой есть переменная класса columns. Я подключаю эту модель к...

Как создать скелет для stl модели по точкам поверхности модели?
нужно придумать алгоритм, чтобы автоматически создавался скелет для stl модели по точкам поверхности модели. Перерыл весь интернет (как мне...

43
 Аватар для Andrey-MSK
3367 / 2253 / 388
Регистрация: 14.08.2018
Сообщений: 7,622
Записей в блоге: 4
11.01.2024, 15:44
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Элд Хасп Посмотреть сообщение
В MvvmLight есть своя реализация команд, но он позволяет использовать и любую другую, из любой другой сторонней библиотеки.
Нет жёсткой завязки именно на свою реализацию. Именно за это здесь и написано.
Я про то, что в исходном коде нет ссылок на сторонние библиотеки, в using только стандарты NET. Единственное там то, что примеры не для WPF.

Добавлено через 59 секунд
C#
1
2
3
using System;
using System.Threading.Tasks;
using System.Windows.Input;
Добавлено через 2 минуты
Элд Хасп, А не, одну нашел... Прошу пардону
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16151 / 11272 / 2890
Регистрация: 21.04.2018
Сообщений: 33,145
Записей в блоге: 2
11.01.2024, 18:37
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
А не, одну нашел... Прошу пардон
юсинги - это же не сборки.
надо по зависимостям сборки или проекта смотреть
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
11.01.2024, 22:18
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
В простейшем случае синхронизация используется вот так. Делаем свойство VM и во View получаем контекст нужного окна
C#
1
2
3
4
5
6
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    IReportByDateWindowVM vm = (IReportByDateWindowVM)DataContext;
 
    vm.ViewContext = SynchronizationContext.Current;
}
А разве тут не у всех окон будет одинаковый контекст при такой реализации? Ну т.е. в документации на 'Current' написано, что:
Gets the synchronization context for the current thread.

https://learn.microsoft.com/en... xt.current
UI-события всегда приходят в UI-потоке, а UI-поток у нас всегда один и неизменный со старта приложения, а значит и контекст всегда будет один и тот же общий. Вот если обработчик будет 'async' и перед получением контекста будет какой-нибудь 'await', тогда да, есть шанс получить какой-то другой контекст (или вообще null).
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16151 / 11272 / 2890
Регистрация: 21.04.2018
Сообщений: 33,145
Записей в блоге: 2
11.01.2024, 23:42
Цитата Сообщение от kotelok Посмотреть сообщение
UI-события всегда приходят в UI-потоке, а UI-поток у нас всегда один и неизменный со старта приложения,
Не путайте основной поток приложения, тот в котором начало работать приложение, и UI поток.
Это в "стандарте" так, как вы пишите. Но по факту можно такого наворотить...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        private async void Application_Startup(object sender, StartupEventArgs e)
        {
            TaskCompletionSource tsc = new();
 
            new Thread(_ =>
            {
                var wind = new MainWindow();
                wind.ShowDialog();
                tsc.SetResult();
            })
            {
                IsBackground = true,
                ApartmentState = ApartmentState.STA
            }
            .Start();
 
            await tsc.Task;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.01.2024, 23:42
Помогаю со студенческими работами здесь

При выборе из Ad модели выбрать по кол-ву в связанной модели ad_images
Всем привет В laravel 6 с фильтром из таблицы ads и хочу установить условие чтобы возвращались только с существующими каритинками в...

Выбор в таблице данных модели ссылки на экземпляр связанной модели
Есть ли какой-то автоматизированный способ вывести на страницу таблицу с записями модели, одно из полей которой ссылается на связанную...

Как вытащить значение поля модели внутри самой модели
Здравствуйте. При написании моего проекта возник следующий вопрос. Имеется модель: class Candidate(models.Model): ...

Как использовать представление одной модели в представлении другой модели?
Добрый день! Хотел бы узнать как использовать представление одной модели в представлении другой модели? В Yii2 совсем новичок. ...

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


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

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

Новые блоги и статьи
Гайд, как ворваться в вайб-кодинг в мае 2026
Noname2331 17.05.2026
Простите за получившееся полотно текста, я даже не знаю, как его разбить на главы. Тут, что называется, ни добавить ни убавить, одна сцена одним дублем. На моих глазах недавно случилось чудо. Как. . .
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера» Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит. Придуман Биллом Госпером в 1970-х, опубликован в. . .
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb"> <style> <!]> </ style> <g id="bush"> </ g> </ svg> function fn(){ let rost;/ / высота древа let xx=165,yy=210,w=256;
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru