Как предотвратить поток пользовательского интерфейса от ввода модели в приложение WPF MVVM? - PullRequest
0 голосов
/ 13 февраля 2020

Я бы хотел установить sh правило в архитектуре моего приложения, согласно которому никакой код в объектах модели не должен выполняться в потоке пользовательского интерфейса. Вопрос в том, как мне обеспечить это?

В C# с использованием async / await, в каком потоке что-то выполняется, обычно определяется вызывающей стороной. Поэтому, если пользователь нажимает кнопку, обработчик событий запускается в потоке пользовательского интерфейса и вызывает мою модель представления. В модели представления я хочу, чтобы разработчик делал что-то вроде вызова Task.Run() при вызове методов в модели. Но это легко забыть. Существуют также неочевидные лазейки, такие как создание события, которое подключено к слушателю, который является модельным объектом. В идеале, когда разработчик допускает такую ​​ошибку в программировании, возникает исключение, как только поток пользовательского интерфейса пытается выполнить метод в модели. Что мне действительно нужно, так это способ пометить сборку, содержащую классы модели, так, чтобы любой метод в ней вызывал исключение, как только оно было введено потоком пользовательского интерфейса. Самым близким, что я смог придумать, является добавление отладочного утверждения в начале каждого метода для проверки потока и сбоя, если это поток пользовательского интерфейса. Однако это засоряет код уродливыми проверками и является еще одной вещью, которую можно забыть.

РЕДАКТИРОВАТЬ: Чтобы уточнить, мне не нужно делать это невозможно, Мне просто нужно, чтобы было легко сделать правильно и определить, когда это сделано неправильно. Чтобы положить его в пропасть успеха.

1 Ответ

0 голосов
/ 13 февраля 2020

Вопрос в том, как мне обеспечить это?

Вы этого не делаете. Невозможно навязать логическое разделение интересов с помощью простых языковых правил.

Лучший способ сделать это - написать анализатор для этой точки, который отображает предупреждение в Visual Studio. НО ... развлекайтесь с этим, я вижу это как слишком сложную задачу, не стоящую времени.

...