Я должен быть задержан с поиском, потому что вот еще одна, казалось бы, распространенная проблема, которую мне не удалось решить.
Вот моя проблема - я использую WPF и MVVM, и у меня есть машина состояний, которая выполняется в модели. Если возникает ошибка, мне нужно передать информацию до ViewModel для отображения ошибки. Эта часть, кажется, работает хорошо. Когда пользователь щелкает требуемое поведение, код в модели продолжается и смотрит на объект, с которым взаимодействует пользователь, чтобы определить, что делать дальше.
Проблема заключается в том, что модели необходимо перезагрузить файл, который обновляет графический интерфейс с помощью содержимого указанного файла. Поскольку модель выполняется в потоке, вы можете представить, что я собираюсь спросить дальше - как, черт возьми, вы правильно синхронизируете с графическим интерфейсом? В MFC я бы использовал SendMessage или PostMessage для обновления GUI.
Я прочитал статьи для WinForms , в которых предлагается использовать InvokeRequired для автоматического вызова BeginInvoke при необходимости. На самом деле я не знал, что BeginInvoke выполнит то, что я хотел, поэтому я был рад этому научиться.
Как я могу вызвать BeginInvoke из моей модели? Применим ли этот метод даже к WPF? Я реализовал делегат и затем вызвал Invoke, но я получаю ту же ошибку, которая говорит мне, что коллекция не может быть изменена из этого потока. Я также попробовал BeginInvoke, но я предполагаю, что это тоже не сработает, потому что он все равно будет запускаться из другого потока.
Confused. Если я пропустил что-то действительно очевидное, что было опубликовано по всему Интернету, продолжайте и дайте мне словесную порку, я, вероятно, заслуживаю этого.
РЕДАКТИРОВАТЬ - Я, вероятно, также должен добавить, что я ищу что-то кроме решения на основе таймера или BackgroundWorker, если только это не единственный способ решить эту проблему в WPF / MVVM , Кроме того, мне интересно, есть ли в каком-либо из наборов инструментов MVVM средства для такого рода вещей ...