|
WPF: Непонятки с потоком пользовательского интерфейса
|
|||
---|---|---|---|
#18+
Боролся с глюком, который в конце концов локализовал до следующего примера: Код: c# 1. 2. 3. 4. 5.
Результат неожиданно разный: 271, 251. Вроде как везде написано, что отрисовка интерфейса выполняется в основном потоке, или я чего-то не понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2016, 13:23 |
|
WPF: Непонятки с потоком пользовательского интерфейса
|
|||
---|---|---|---|
#18+
возможно уши торчат из диспатчера ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2016, 16:26 |
|
WPF: Непонятки с потоком пользовательского интерфейса
|
|||
---|---|---|---|
#18+
Roman Mejtesвозможно уши торчат из диспатчераЭэээ, а сможешь чуть поподробнее? Ковыряю процессы измерения и упорядочивания при компоновке, но это, кажется, не о том. По крайней мере прямым текстом сказано, что после Arrange можно сразу читать ActualWidth/Height... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2016, 16:33 |
|
WPF: Непонятки с потоком пользовательского интерфейса
|
|||
---|---|---|---|
#18+
после того как ты поменял Margin иди другое свойство отвечающее за компоновку элементов, сам элемент помечается как грязный и ставится в очередь в диспатчере на перекомпоновку (выполнение связки Measure, Arrange в зависимости от их необходимости) Скорее всего, дело в том, ты меняешься свойство зависимости, у которого в опциях стоит AffectedArrange и AffectedMeasure, следовательно, когда ты менаешься эти значения размер пересчитается не сразу, а как только Dispatcher его выполнит. 1 раз ты считываешь значение до перекомпоновки, а когда запускаешь Delay, диспатчером запускается пересчет и он выполняется. Думаю причина в этом, но я не на работе сегодня, так что это еще надо "проверить" :) это лишь моя догадка, так что не стоит к ней "наверочку" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2016, 16:41 |
|
WPF: Непонятки с потоком пользовательского интерфейса
|
|||
---|---|---|---|
#18+
Ага. Ну, в принципе, это было бы вполне логично - перекомпоновка не производится каждый раз, как я что-то поменял, а ставятся в очередь, тогда можно сильно сэкономить на пересчете, если я меняю за раз кучу разных параметров, влияющих на компоновку. И тогда достаточно дать минимальное время на Delay, управление перехватит диспетчер и не отдаст мне управление, пока не пройдет пересчет. Впрочем, такой подход все же попахивает костылями, попробую поискать более корректный путь. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2016, 23:06 |
|
|
start [/forum/topic.php?fid=21&fpage=12&tid=1440682]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 157ms |
0 / 0 |