![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 10.02.2009
Сообщений: 815
|
![]()
Доброго времени суток!
В событии панели OnPaint() создана длительная анимация, останаилвается основной поток: Код:
В Delphi была такая замечательная штука: Код:
Собственно вопрос заключается в том, как отключить перерисовку panel'и извне в С#, либо обрубать сообщения в событии, либо чистить "стэк" от него, в общем хочу чтобы моя "быстрая" или "долгая" анимация доходила до конца. p.s. пробовал Application.DoEvents(); не уверен что в след раз "сработает" т.к. зависания показались рандомными. Спасибо! Последний раз редактировалось Lime; 21.03.2012 в 16:50. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
![]()
Во-первых, можно запретить заходить в OnPaint одновременно два раза.
Код:
Во-вторых, делать длительные операции в OnPaint как-то неправильно. Лучше вызвать их асинхронно, а в конце операции вызвать Invalidate (). |
![]() |
![]() |
![]() |
#3 | |
Форумчанин
Регистрация: 10.02.2009
Сообщений: 815
|
![]()
По факту в OnPaint() то заходит, несмотря на то что там пусто. У меня так и сделано
Код:
![]() Цитата:
Да, я бы смог сделать всё по другому, но меня интересует именно выход из этой ситуации. Последний раз редактировалось Lime; 21.03.2012 в 16:49. |
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
![]()
Ого ж как мой пост переглючило... Я сделал ссылку на ThreadPool.QueueUserWorkItem, потому что все почему-то создают Thread, даже для простейших случаев.
Прочитал вопрос ещё раз, и понял, что ничего не понял. Без кода понять трудно. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 10.02.2009
Сообщений: 815
|
![]()
В коде ничего особенного, пара циклов да рисование примитивных фигур, и всё это в OnPaint() панельки.
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
![]()
Я имел в виду исходный код, а не бинарник.
Засовывать Sleep в OnPaint - порочная практика. Асинхронные операции для того и существуют, чтобы выполнять их, не блокируя UI. Последний раз редактировалось ds.Dante; 22.03.2012 в 09:16. |
![]() |
![]() |
![]() |
#7 | |
Форумчанин
Регистрация: 10.02.2009
Сообщений: 815
|
![]() Цитата:
Задача была - сделать анимацию работы алгоритма. Нечто вроде этого: ![]() (на картинке построение, равносильно 0-вому проходу цикла сортировки) При этом анимацию довольно удобно делать в самом коде алгоритма, т.к. от программы не требуется сама сортировка и её быстрое выполнение. А отдельный поток для вызова перерисовки делать не хотелось, к тому-же я не до конца разобрался с дескрипторами и рисованием без вывода изображения на какой-либо элемент. |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Отключить регистрацию | Predator199 | PHP | 0 | 06.03.2012 06:22 |
Запретить перерисовку TChart | Sanprof | Общие вопросы Delphi | 3 | 25.11.2011 11:29 |
отключить в TWebBrowser.... | designer999 | Работа с сетью в Delphi | 0 | 10.05.2010 10:56 |
можно ли прописать стиль для элемента "внутри" этого самого элемента ? | vedro-compota | HTML и CSS | 8 | 03.05.2010 17:24 |
Си -Расположить элементы в порядке возрастания от первого нулевого элемента до отрицательного элемента | Freia | Помощь студентам | 17 | 13.12.2009 15:41 |