Почему злоупотреблять вызовом refresh ()? - PullRequest
3 голосов
/ 04 мая 2011

Как в этом примере:

someImage.Source = newSource;
someImage.refresh();

Несколько дней назад в этом сообщении я ответил refresh () и получил ответ, что это хак / злоупотребление.Я не понимаю почему.

Ответы [ 4 ]

3 голосов
/ 04 мая 2011

MSDN имеет ответ.

Control.Refresh:

Вынуждает элемент управления сделать недействительной свою клиентскую область и немедленно перерисовать себя и все дочерние элементы управления..

Control.Invalidate:

Делает недействительной всю поверхность элемента управления и вызывает перерисовку элемента управления.[…] Вызов метода Invalidate не приводит к принудительному синхронному рисованию

[Выделение мое]

Дело в том, что Refresh, в отличие от Invalidate, вызывает синхронный вызов, который эффективно прерывает поток событий по умолчанию в формах и обрезает строку в очереди сообщений.Это может привести к задержке других оконных сообщений (событий из операционной системы).

2 голосов
/ 04 мая 2011

Вызов метода Refresh вообще не нужен, если у вас отзывчивый пользовательский интерфейс.Установка свойства Source создает сообщение, которое делает недействительным отображение элемента управления, поэтому оно будет обновляться автоматически при обработке этого сообщения.

Это только в том случае, если ваш код содержит длительный цикл, поэтому он нене обрабатывать сообщения вообще в течение длительного периода, что вам нужно использовать метод Refresh.Такого длинного цикла следует избегать, так как это приводит к тому, что пользовательский интерфейс перестает отвечать на запросы.

0 голосов
/ 04 мая 2011

Поскольку большинство сред графического интерфейса обрабатывают обновления / обновления автоматически, если вы используете их правильно.

При обновлении вы обходите симптом (что-то не обновляется автоматически), а не устраняете основную причину.

Проблема в том, что обновления обычно начинают распространяться как вирус. Вы вставляете это в одно место, и вдруг вам это нужно во втором месте, третьем и т. Д.

0 голосов
/ 04 мая 2011

простыми словами Refresh() перезагрузит интерфейс, когда некоторые из них изменятся

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...