WPF Threading вопрос - PullRequest
       6

WPF Threading вопрос

1 голос
/ 29 января 2010

Скажем, у меня есть два пользовательских элемента управления, UC1 и UC2. Пользователь выбирает что-то в UC1, что занимает некоторое время, поэтому процесс отключается. UC2 должен обновить свое представление и выполнить некоторую работу самостоятельно в другом потоке, когда UC1 завершает работу. Но UC2 зависит от выходных данных фонового потока UC1, поэтому ему нужно дождаться завершения этого потока, прежде чем он начнется.

UC1 необходимо обновить ObservableCollection, чтобы обновить его представление после завершения фонового потока, как это делает UC1, асинхронно.

Какой лучший способ сделать это? Я попытался просто вывести их из потока и запустить сообщение из потока UC1, но тогда UC2 не может изменить свою ObservableCollection, потому что он не в нужном потоке - он считает, что это в потоке UC1.

Нужно ли маршалировать событие сообщения с UC1 на UC2, это безопасно?

Как люди обычно справляются с этим?

1 Ответ

2 голосов
/ 29 января 2010

Оба UserControls должны жить в одном потоке. Так устроен WPF.

Поскольку UC2 зависит от события, от которого также зависит UC1, я бы назначил UC1 область действия времени жизни события и отправил бы сообщение UC2, когда работа будет завершена, или же UC2 подпишется на ObservableCollection. CollectionChanged событие. Они оба живут в одном и том же потоке пользовательского интерфейса, поэтому сортировка между ними не требуется, вам просто нужно упорядочить фоновый поток в соответствующий UserControl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...