|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Смысл в чем - я делаю некоторое действие, которое повлияет на отображение, то есть изменится визуальное дерево. Действие делаю в потоке пользовательского интерфейса. WPF откладывает обновление визуального дерева, пока мой поток что-то делает. Но для продолжения обработки мне нужно, чтобы дерево обновилось. Обычно я делал так: Код: c# 1.
в предположении, что поток пользовательского интерфейса, получив управление, отрисует все, что было отложено, и только после этого мой поток вернется с паузы в контекст синхронизации. Но сейчас столкнулся с тем, что может быть отрисовано не всё, то есть Delay(10) работает через раз, а Delay(100) работает лучше. Из чего делаю вывод, что моё предположение было неверным. Как же убедиться в том, что в очереди отрисовки визуального дерева ничего не осталось? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 12:43 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 12:52 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Попробую. Но это на конкретный контрол, то есть нужно еще думать, куда его подвесить. Хорошо бы централизованный что ли какой-то способ. Еще возникла мысль, запустить заглушку на диспетчере через BeginInvoke с низким приоритетом и ожидать ее завершения выполнения... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 13:05 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Shocker.ProДействие делаю в потоке пользовательского интерфейса. Shocker.Proпредположении, что поток пользовательского интерфейса, получив управление, Дак в каком потоке работа? В основном? Тогда делай в дополнительном. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 13:48 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Petro123Тогда делай в дополнительном.не могу, так как работа дальше с интерфейсом ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 13:52 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Shocker.ProPetro123Тогда делай в дополнительном.не могу, так как работа дальше с интерфейсом Тогда странная диспетчеризация. Должна делаться работа и на экране все моргать, т.к. все Paint события отработают. Типа Control.Repaint or Paint там нет? Принудительной. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 13:58 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Shocker.ProПопробую. Но это на конкретный контрол, то есть нужно еще думать, куда его подвесить. Хорошо бы централизованный что ли какой-то способ. Еще возникла мысль, запустить заглушку на диспетчере через BeginInvoke с низким приоритетом и ожидать ее завершения выполнения... Ну да, можно вот так: Код: c# 1.
- DispatcherPriority.ContextIdle ниже, чем DispatcherPriority.Render. Соответственно, эта строка будет исполнена только после отработки поставленного в очередь диспетчера рендеринга. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 14:01 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
[quot Petro123]Тогда странная диспетчеризация. Должна делаться работа и на экране все моргать, т.к. все Paint события отработают. Это WPF, а не винфорс. Ваш К.О. Petro123Типа Control.Repaint or Paint там нет? Принудительной. А Control.Repaint что, синхронизации не требует? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 14:03 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныЭто WPF, а не винфорс. Ваш К.О.да. Тут особенности. Сон Веры ПавловныА Control.Repaint что, синхронизации не требует? Если в винде и потоке гуи то не требует. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 14:09 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Shocker.ProPetro123Тогда делай в дополнительном.не могу, так как работа дальше с интерфейсом Хмммм. Интересный топик. Т.е. ты к примеру настолько забиваешь процессор работой в основном потоке, что гуи не перерисовывается. Но дальше ты же не с пикселями работаешь? Зачем после 1000 вставленных node перерисовать и продолжить? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 14:16 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Petro123Хмммм. Интересный топик. Т.е. ты к примеру настолько забиваешь процессор работой в основном потоке, что гуи не перерисовывается. Но дальше ты же не с пикселями работаешь? Зачем после 1000 вставленных node перерисовать и продолжить? Да какое тут забивание процессора - человек же русским языком пишет, что его действия вызывают перерисовку, а в WPF она осуществляется в очереди диспетчера, т.е. не сразу по факту. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 14:22 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, т.е. не сразупочему не сразу? Я и подумал, проц.занят. цикл for 10000 addNode ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 14:27 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Перерисовку вообще выключают у контролов при большой работе. Потом включают. Так в 10 раз быстрее. Но кому то нравится визуалАнимация. Control.beginUpdate() ..... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 14:35 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Petro123почему не сразу? Потому что так устроен WPF Petro123Перерисовку вообще выключают у контролов при большой работе. Потом включают. Можно вопрос? Вы давно работаете с WPF? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 14:38 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, На wpf лежит проект. Скоро начну). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 14:39 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Я просил короткий ответ - почему не сразу перерисовка если проц. не загружен? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 14:41 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Petro123Сон Веры Павловны, Я просил короткий ответ - почему не сразу перерисовка если проц. не загружен? Можете еще раз попросить, я еще раз дам ссылку . ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 14:43 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, И на том спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 14:45 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
у свойств зависимости есть параметр FrameworkPropertyMetadataOptions.AffectsRender который сигнализирует о том, что Control необходимо перерендерить. по идее, как только произойдет вызов PropertyChanged() для свойства связанного с этим свойством зависимости элемент управления должен будет перерендериться. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 14:52 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Roman Mejtesу свойств зависимости есть параметр FrameworkPropertyMetadataOptions.AffectsRender который сигнализирует о том, что Control необходимо перерендерить. по идее, как только произойдет вызов PropertyChanged() для свойства связанного с этим свойством зависимости элемент управления должен будет перерендериться. Справка , кстати говоря, не говорит о том, с каким приоритетом будет выполнен рендеринг. Я ничего не смог найти в гугле на эту тему, поэтому, думаю, вполне можно предполагать, что рендеринг будет поставлен в чередь диспетчера. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 15:15 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
Код: sql 1.
вполне себе сработало ) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 15:29 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
ну пол логике вещей, как я вчегда и считал, выполняться будет в порядке заданном в DispatcherPriority (в обратном порядке, чем выше приоритет, тем раньше будет выполнение) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 15:36 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
попробуй просто через Dispatcher.Invoke с приоритетом Render вызвать какой то делегат, не суть важно даже какой. Это вызовет обработку очереди до заданного приоритета, после чего тебе вернется управление ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 16:13 |
|
WPF: Как правильно дождаться обновления визуального дерева?
|
|||
---|---|---|---|
#18+
ну я, собственно, выше отписал, что получилось ) спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2018, 16:25 |
|
|
start [/forum/topic.php?fid=21&fpage=4&tid=1440359]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
49ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 180ms |
0 / 0 |