Страницы

Поиск по вопросам

среда, 20 февраля 2019 г.

Для каких целей нужен метод PushFrame

Я наткнулся на метод PushFrame у класса Dispatcher. Бегло посмотрел реализацию и прочитал про него в документации. Вот упрощенная версия этого метода.
public void PushFrame(DispatcherFrame frame) { // Stuff _frameDepth++; while(frame.Continue) { // Getting and dispatching messages } _frameDepth--; // Stuff }
Я понимаю что метод просто создает и обрабатывает новый цикл сообщений. Но я не могу понять, какие именно цели такой подход может достигать? Разве одного цикла недостаточно? Более я того, я скольнен полагать, что использование еще одного вложенного цикла может вести к довольно неочевидным ошибкам


Ответ

Хороший вопрос.
Коротко — вы не должны им пользоваться в обычном случае, этот метод — внутренний метод инфраструктуры.
Ситуации, в которых нужно было бы использование PushFrame — блокирующие методы наподобие ShowDialog (в самом ShowDialog тоже используется PushFrame). В них вам нужно на время работы блокирующей функции не прекращать обработку цикла сообщений, и для этодо при помощи PushFrame создаётся вложенный цикл.
В современном C# использование блокирующих методов считается неидиоматичным. Правильным дизайном с позиций сегодняшнего дня было бы использование async-варианта. Здесь есть примеры такого дизайна с кодом.

Комментариев нет:

Отправить комментарий