У меня есть два перекрывающихся (в одинаковом положении, одинакового размера) элемента MediaElements. Они будут содержать изображения. Непрозрачность одного элемента будет установлена на 1,0, а непрозрачность другого - на 0,0. Идея здесь будет простой переход для сделки типа слайд-шоу. Когда пришло время отобразить следующий слайд, элемент фона загружает картинку, и непрозрачность обоих элементов постепенно переключается.
Я попытался (успешно) реализовать это поведение с помощью System.Timers, но обнаружил, что наличие более одного произвольного числа таймеров в одном приложении приведет к случайному появлению .NET и передаче управления timer_elapsed нескольким различным потокам. Это привело к непредсказуемым результатам и вообще заставило меня усомниться в моем здравомыслии.
Итак, я решил сделать то же самое, но с System.Threads и их функциями Sleep. По какой-то причине постепенная цикличность непрозрачности отлично работала с безумными таймерами, но не работала с потоками. И это терпит неудачу нелепым образом. Непрозрачность обоих элементов меняет , но между ними нет. Элемент отображается с непрозрачностью 1,0 или 0,0. В противном случае я бы заметил, что примерно половина снимков не проходила циклически.
После долгих поисков я подумал, что, возможно, приоритет потока, в котором происходят изменения непрозрачности, заключался в том, чтобы не допустить немедленного рендеринга элементов пользовательского интерфейса. Но потом я вспомнил, что, поскольку я использовал диспетчерские вызовы для элементов мультимедиа, все действия происходили в основном потоке в любом случае, поэтому это не будет иметь значения.
Создайте следующий код: https://gist.github.com/956093