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

349
22 января 2017, 13:32

Я наткнулся на метод PushFrame у класса Dispatcher. Бегло посмотрел реализацию и прочитал про него в документации. Вот упрощенная версия этого метода.

public void PushFrame(DispatcherFrame frame)
{
    // Stuff
    _frameDepth++;
    while(frame.Continue)
    {
        // Getting and dispatching messages
    }
   _frameDepth--;
   // Stuff
}

Я понимаю что метод просто создает и обрабатывает новый цикл сообщений. Но я не могу понять, какие именно цели такой подход может достигать? Разве одного цикла недостаточно? Более я того, я скольнен полагать, что использование еще одного вложенного цикла может вести к довольно неочевидным ошибкам

Answer 1

Хороший вопрос.

Коротко — вы не должны им пользоваться в обычном случае, этот метод — внутренний метод инфраструктуры.

Ситуации, в которых нужно было бы использование PushFrame — блокирующие методы наподобие ShowDialog (в самом ShowDialog тоже используется PushFrame). В них вам нужно на время работы блокирующей функции не прекращать обработку цикла сообщений, и для этодо при помощи PushFrame создаётся вложенный цикл.

В современном C# использование блокирующих методов считается неидиоматичным. Правильным дизайном с позиций сегодняшнего дня было бы использование async-варианта. Здесь есть примеры такого дизайна с кодом.

READ ALSO
Визуализация сортировки выбором

Визуализация сортировки выбором

Код почему-то виснет и только через секунд 10 строит уже отсортированный график, то бишь промежуточных построений не видноИз-за чего это может...

442
Система модулей и плагинов ASP.NET MVC Core

Система модулей и плагинов ASP.NET MVC Core

Мы делаем CMS, и хотим сделать возможность плагинов для неёНапример: есть статья, и плагин с помощью которого к статье можно ставить лайки

419
Что не так с моим кодом? MVVM

Что не так с моим кодом? MVVM

При нажатию на кнопки в ItemsControl'е слева должно генерироваться поле в соответствии с данными в левом поле размерами,но поле не генерируются...

359