Я наткнулся на метод 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
-варианта. Здесь есть примеры такого дизайна с кодом.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Код почему-то виснет и только через секунд 10 строит уже отсортированный график, то бишь промежуточных построений не видноИз-за чего это может...
Мы делаем CMS, и хотим сделать возможность плагинов для неёНапример: есть статья, и плагин с помощью которого к статье можно ставить лайки
При нажатию на кнопки в ItemsControl'е слева должно генерироваться поле в соответствии с данными в левом поле размерами,но поле не генерируются...