Межпоточные проблемы с привязкой данных .NET - PullRequest
3 голосов
/ 09 июня 2010

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

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

Спасибо!

1 Ответ

3 голосов
/ 10 июня 2010

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

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

...