2010-06-09 6 views
3

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

Проблема, с которой я столкнулся, заключается в том, что состояние объекта может быть изменено любым из нескольких разных потоков в любой момент. В настоящее время я использую Invoke() для обработки этого, который отлично работает, но когда я переключаюсь на привязку данных, я становлюсь завален незаконными контрольными исключениями управления потоком. Есть ли предпочтительный метод обработки этого изящного использования привязки данных, или мне лучше просто оставить вещи так, как они есть сейчас?

Спасибо!

+0

Можете ли вы показать свой код до и после. – ChrisF

ответ

3

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

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

+0

+1 для использования 'SynchronizationContext' - как вы упоминаете, он может идентифицировать неизвестные проблемы, но очистка ошибок потоковой передачи редко бывает плохой идеей – STW