Многопоточность Silverlight;Нужно синхронизировать? - PullRequest
0 голосов
/ 21 апреля 2011

У меня есть приложение Silverlight, в котором я реализовал шаблон MV-VM, поэтому мои фактические элементы пользовательского интерфейса (представления) отделены от данных (модели).В любом случае, в какой-то момент после того, как пользователь ушел и сделал некоторые выборы и возможный другой ввод, я хотел бы асинхронно пройтись по модели и отсканировать ее и составить список вариантов, которые пользователь изменил (отличается от значения по умолчанию),и в конечном итоге обновить его в пользовательском интерфейсе в качестве сводки, но это будет последний шаг.

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

Существуют списки (ObservableCollections), поэтому мне придется вызывать методы этих коллекций, такие как "_ABCCollection.GetSelectedItems ()", но снова яЯ просто читаю, я не делаю изменения.Поскольку они не являются примитивами, мне придется синхронизировать доступ к ним только для чтения, или это не имеет значения?

Я предполагаю, что мне придется синхронизировать мой последний шаг, так как это вызовет события PropertyChanged ив конечном итоге представления будут запрашивать новые данные через привязки ...

Заранее благодарим за любые советы.

1 Ответ

0 голосов
/ 21 апреля 2011

Вы правы. Вы можете читать из своих объектов Model и ObservableCollections в рабочем потоке без нарушения межпоточного режима. Получение или установка значения свойства для элемента пользовательского интерфейса (более конкретно, объекта, производного от DispatcherObject) должны выполняться в потоке пользовательского интерфейса (более конкретно, в потоке, в котором был создан экземпляр подкласса DispatcherObject). Подробнее об этом см. здесь .

...