powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF: Непонятки с потоком пользовательского интерфейса
5 сообщений из 5, страница 1 из 1
WPF: Непонятки с потоком пользовательского интерфейса
    #39227432
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Боролся с глюком, который в конце концов локализовал до следующего примера:

Код: c#
1.
2.
3.
4.
5.
      stack.Margin = new Thickness(10);
      var t1 = stack.ActualHeight;
      await Task.Delay(200);
      var t2 = stack.ActualHeight;
      MessageBox.Show(string.Format("{0}\n{1}", t1, t2));

Результат неожиданно разный: 271, 251.
Вроде как везде написано, что отрисовка интерфейса выполняется в основном потоке, или я чего-то не понимаю?
...
Рейтинг: 0 / 0
WPF: Непонятки с потоком пользовательского интерфейса
    #39227669
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно уши торчат из диспатчера
...
Рейтинг: 0 / 0
WPF: Непонятки с потоком пользовательского интерфейса
    #39227681
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesвозможно уши торчат из диспатчераЭэээ, а сможешь чуть поподробнее?
Ковыряю процессы измерения и упорядочивания при компоновке, но это, кажется, не о том. По крайней мере прямым текстом сказано, что после Arrange можно сразу читать ActualWidth/Height...
...
Рейтинг: 0 / 0
WPF: Непонятки с потоком пользовательского интерфейса
    #39227689
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
после того как ты поменял Margin иди другое свойство отвечающее за компоновку элементов, сам элемент помечается как грязный и ставится в очередь в диспатчере на перекомпоновку (выполнение связки Measure, Arrange в зависимости от их необходимости)
Скорее всего, дело в том, ты меняешься свойство зависимости, у которого в опциях стоит AffectedArrange и AffectedMeasure, следовательно, когда ты менаешься эти значения размер пересчитается не сразу, а как только Dispatcher его выполнит.
1 раз ты считываешь значение до перекомпоновки, а когда запускаешь Delay, диспатчером запускается пересчет и он выполняется.
Думаю причина в этом, но я не на работе сегодня, так что это еще надо "проверить" :)
это лишь моя догадка, так что не стоит к ней "наверочку" :)
...
Рейтинг: 0 / 0
WPF: Непонятки с потоком пользовательского интерфейса
    #39227861
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага. Ну, в принципе, это было бы вполне логично - перекомпоновка не производится каждый раз, как я что-то поменял, а ставятся в очередь, тогда можно сильно сэкономить на пересчете, если я меняю за раз кучу разных параметров, влияющих на компоновку. И тогда достаточно дать минимальное время на Delay, управление перехватит диспетчер и не отдаст мне управление, пока не пройдет пересчет. Впрочем, такой подход все же попахивает костылями, попробую поискать более корректный путь.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF: Непонятки с потоком пользовательского интерфейса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]