WPF и активные объекты - PullRequest
3 голосов
/ 26 января 2010

У меня есть коллекция "активных объектов". То есть объекты, которые должны периодически обновляться. В свою очередь, эти объекты следует использовать для обновления графического интерфейса на основе WPF.

В прошлом я просто включал каждый объект в свой поток, но это имеет смысл только при работе с конечным числом объектов с четко определенными жизненными циклами. Сейчас я использую объекты, которые существуют только тогда, когда они нужны форме, поэтому жизненный цикл непредсказуем. Кроме того, у меня могут быть десятки объектов, каждый из которых выполняет вызовы из базы данных и веб-службы.

В нормальных условиях интервал обновления составляет 1 секунду, но из-за тайм-аутов он может занять до 30 секунд.

Итак, какой дизайн вы бы порекомендовали?

Ответы [ 3 ]

1 голос
/ 09 февраля 2010

Вы можете использовать один диспетчер (планировщик) для всех или группы активных объектов. Диспетчер может обрабатывать высокоприоритетные задачи в первую очередь, чем другие. Вы можете увидеть эту статью о долгосрочных активных объектах с кодом, чтобы узнать, как это сделать. Кроме того, я рекомендую взглянуть на шаблон Half Sync / Half Async. Если есть вопросы - добро пожаловать.

0 голосов
/ 26 января 2010

Вероятно, я бы попытался обобщить какую-то шину данных, если это возможно, и когда объекты «активны», они должны добавить себя в список объектов, которые будут обновлены. Особенно мне хотелось бы использовать этот шаблон, если объекты поддерживаются базой данных, так как таким образом вы можете агрегировать несколько запросов, вместо того, чтобы выполнять один запрос для каждого объекта.

Если в конечном итоге не будет прослушивателей для конкретного объекта, ничего страшного, данные просто никуда не денутся.

Код ядра обновления может затем использовать один таймер (или несколько, или все, что подходит), чтобы определить, когда получать обновления. Выполнение этого в виде большего потока данных и меньшего количества «обновления состояния», вероятно, сохранит много здравого смысла в конце.

0 голосов
/ 26 января 2010

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

...