|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.03.2012, 14:39 | #1 |
Форумчанин
Регистрация: 10.02.2009
Сообщений: 815
|
Отключить перерисовку элемента
Доброго времени суток!
В событии панели OnPaint() создана длительная анимация, останаилвается основной поток: Код:
В Delphi была такая замечательная штука: Код:
Собственно вопрос заключается в том, как отключить перерисовку panel'и извне в С#, либо обрубать сообщения в событии, либо чистить "стэк" от него, в общем хочу чтобы моя "быстрая" или "долгая" анимация доходила до конца. p.s. пробовал Application.DoEvents(); не уверен что в след раз "сработает" т.к. зависания показались рандомными. Спасибо! Последний раз редактировалось Lime; 21.03.2012 в 16:50. |
21.03.2012, 15:41 | #2 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Во-первых, можно запретить заходить в OnPaint одновременно два раза.
Код:
Во-вторых, делать длительные операции в OnPaint как-то неправильно. Лучше вызвать их асинхронно, а в конце операции вызвать Invalidate (). |
21.03.2012, 16:46 | #3 | |
Форумчанин
Регистрация: 10.02.2009
Сообщений: 815
|
По факту в OnPaint() то заходит, несмотря на то что там пусто. У меня так и сделано
Код:
Цитата:
Да, я бы смог сделать всё по другому, но меня интересует именно выход из этой ситуации. Последний раз редактировалось Lime; 21.03.2012 в 16:49. |
|
21.03.2012, 17:01 | #4 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Ого ж как мой пост переглючило... Я сделал ссылку на ThreadPool.QueueUserWorkItem, потому что все почему-то создают Thread, даже для простейших случаев.
Прочитал вопрос ещё раз, и понял, что ничего не понял. Без кода понять трудно. |
21.03.2012, 18:20 | #5 |
Форумчанин
Регистрация: 10.02.2009
Сообщений: 815
|
В коде ничего особенного, пара циклов да рисование примитивных фигур, и всё это в OnPaint() панельки.
|
22.03.2012, 09:07 | #6 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Я имел в виду исходный код, а не бинарник.
Засовывать Sleep в OnPaint - порочная практика. Асинхронные операции для того и существуют, чтобы выполнять их, не блокируя UI. Последний раз редактировалось ds.Dante; 22.03.2012 в 09:16. |
22.03.2012, 16:13 | #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 |