Я программирую приложение TAPI, которое использует шаблон состояния для работы с различными состояниями, в которых может находиться TK. Входящие и исходящие вызовы записываются через ObservableCollection
в ListView
(журнал вызовов). Данные о звонках сравниваются с контактами, хранящимися в базе данных SQL-Server, для определения возможных совпадений. Затем эта информация используется для обновления журнала вызовов. Все это, конечно, в реальном времени и все управляется/в разных состояниях FSM (конечный автомат).
Чтобы различать вызовы, я использую идентификатор вызова (который предоставляется TAPI). Когда звонит телефон или я начинаю звонить, в журнал вызовов добавляется новая запись, включая идентификатор вызова, и в базе данных клиентов выполняется поиск номера, и определенные данные в журнале обновляются соответствующим образом. При переходе через различные состояния вызова приложение динамически обновляет журнал (т. е. меняет значок, который визуально показывает состояние конкретного вызова и т. д.).
Именно эти обновления ObservableCollection
вызывают у меня головную боль, так как они должны происходить в определенном порядке. Например, при получении вызова связанное состояние создаст новую запись в ObservableCollection
. Когда состояние изменяется, новое состояние может попытаться обновить коллекцию, даже если неясно, была ли уже добавлена запись, которая должна быть изменена. Состояния переключаются очень быстро, по-видимому, быстрее, чем может произойти обновление коллекции.
Будет ли какая-то очередь сообщений возможным/хорошим решением? Если да, то как можно реализовать такую очередь сообщений - в контексте конечного автомата или ObservableCollection
. Я не ищу полных решений, но буду признателен за любую информацию, которую я не могу легко найти через Google или stackoverflow.
Изменить: вопрос сильно перефразирован.
Изменить: я добавил собственное решение проблемы, но подожду и посмотрю, может быть, у кого-то есть идея получше.
break
к вашемуforeach
, чтобы сделать его эквивалентнымFirstOrDefault
. - person Branko Dimitrijevic   schedule 17.10.2011