Я работаю над приложением WPF. У меня есть следующий код:
Но я никогда не получаю точку останова, которая ставится в начале метода ExpandFreeDraw:
Когда я вызываю метод BeginInvoke, я уже в потоке пользовательского интерфейса:
Метод ExpandFreeDraw также должен происходить в потоке пользовательского интерфейса. Я вызываю его с приоритетом незанятости контекста по следующей причине:
Перед строкой BeginInvoke я изменяю Видимость расширителя WPF с свернутого на Видимый. Он начинает рендеринг своих элементов управления: некоторые из этих элементов управления являются элементами управления вводом, и я хочу применить к ним проверку (выполняется с помощью AdornerDecorator, из-за чего у элемента управления ввода появляется красная граница проверки). Если я вызываю ExpandFreeDraw непосредственно после изменения видимости Expander (просто ExpandFreeDraw () без Dispatcher), я получаю точку останова в начале метода ExpandFreeDraw: расширитель виден, но флажок не применяется правильно - без красного эффект границы.
Я получаю тот же эффект с Dispatcher.BeginInvoke со следующим более низким приоритетом, который является фоновым:
In в этом случае я также получаю точку останова в начале метода ExpandFreeDraw. Когда я применяю следующий приоритет, который является ContextIdle, тогда воспроизводится моя проблема - я не достигаю упомянутой точки останова.
Обратите внимание, что эта функция работает большую часть времени, и именно так я знаю ContextIdle приоритет - мой желаемый приоритет, потому что он применяет проверку к элементам управления вводом в большинстве случаев (если я уменьшу приоритет до фона, он уже не будет). Это потому, что приоритет для Диспетчера - это ContextIdle, который меньше, чем Render. Подробнее об этом можно прочитать здесь: http://www.jonathanantoine.com/2011/08/29/update-my-ui-now-how-to-wait-for-the-rendering-to-finish/).
Я хотел бы получить помощь по как выяснить в чем проблема. Почему
правильно вызывает метод ExpandFreeDraw в большинстве случаев, но в одном из сценариев ios (что я не могу действительно понимаю, что) это не так? Как я могу отладить это?
Может быть:
Может ли фоновые операции никогда не завершаться? И поэтому операция с приоритетом ContextIdle никогда не выполняется? Как я могу это выяснить?