Как ведут себя отдельные модули / представления в Prism (составной шаблон приложения для WPF) - PullRequest
0 голосов
/ 24 сентября 2010

Это может звучать как вопрос n00b, так как я пока очень мало знаю о PRISM, но давайте представим, что у меня есть гипотетическая ситуация с составным приложением, состоящим из 3 элементов управления: Элемент управления A (диаграмма), Элемент управления B таблица) и Control C (калькулятор).

Все ли эти элементы управления работают в одном потоке пользовательского интерфейса? Например, если Control A начинает делать какие-то сумасшедшие вычисления в своем основном потоке и блокирует - весь контейнер замерзнет?

Если ответ на этот вопрос положительный - единственное решение сказать «контрольной команде», чтобы А этого не делала? Или есть какой-то шаблон проектирования, о котором мы могли бы подумать?

Если ответ на этот вопрос - нет - можете ли вы немного объяснить, как это работает, или указать мне какую-то документацию, которую я мог бы рассмотреть по этому вопросу?

Спасибо

1 Ответ

3 голосов
/ 25 сентября 2010

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

if (!Dispatcher.CheckAccess())
   Dispatcher.Invoke(new Action(() => item.Items.Add(subitem)));
else
   item.Items.Add(subitem);

Это также можно сделать при использовании EventAggregator для подписки на события какследует:

 eventAggregator.GetEvent<AnEvent>().Subscribe(DoWork, ThreadOption.UIThread);

Здесь есть еще немного информации по теме:

http://msdn.microsoft.com/en-us/library/ms741870.aspx#threading_overview

...