Изменение пользовательского интерфейса в ответ на событие Storyboard.Completed.Нужен ли нам BeginInvoke? - PullRequest
3 голосов
/ 03 августа 2011

У меня есть ContentPresenter, который переключается между 2 состояниями («редактор» и «просмотрщик»).Состояния имеют разную высоту и разные значения свойств Content и ContentTemplate.

В одном изменении состояния я изменяю размер элемента управления, играя на раскадровке, и в ответ на событие Storyboard.Completed я изменяю свойства содержимого / шаблона.

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

Однако всякий раз, когда я откладывалContentPresenter изменяется с помощью Dispatcher.BeginInvoke (), проблемы, кажется, исчезают.(Требуется дополнительное тестирование.)

У кого-нибудь есть объяснение?В Интернете вы найдете множество примеров кода, которые выполняют изменения пользовательского интерфейса в обработчике Storyboard.Completed, поэтому я нахожу это немного странным.

1 Ответ

0 голосов
/ 26 августа 2011

Я подозреваю, что это может быть больше из-за синхронизации, чем необходимость быть в потоке пользовательского интерфейса.Попробуйте сделать Sleep на секунду или около того, прежде чем изменять свойства Content / Template вместо использования Dispatcher.BeginInvoke ().Если мерцание исчезло, возможно, виновата попытка изменить эти свойства, пока Контент занимался изменением размера во время раскадровки - возможно, было бы полезно назначить фиксированный размер или отключить постоянное изменение размера во время раскадровки.Хотя это всего лишь предположение, мне нужно посмотреть образец, чтобы понять это.Если вы сможете сделать небольшой образец, чтобы воспроизвести его, я с удовольствием посмотрю на него.

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