Как говорит @Chris, любая из первых трех вещей должна работать, и, как говорит @Phyxx, она не всегда действительно работает.Проблема заключается в некоторой тонкой вещи в порядке изменения свойств.Чтобы обойти это, вам нужно позволить WPF вызывать ваш код выбора вкладок в свое время:
Dispatcher.BeginInvoke((Action)(() => MyTabControl.SelectedIndex = x));
Это делает то же, что и таймер Phyxx, но немного менее экстремально.