You should override metadata in static constructor always . You don't need to override with every instance or method.
Move this code in static constructor of your class:
Timeline.DesiredFrameRateProperty.OverrideMetadata(typeof(Timeline),
new FrameworkPropertyMetadata { DefaultValue = 5 });
From MSDN:
Overriding metadata on a dependency property must be done prior to that property being placed in use by the property system (this equates to the time that specific instances of objects that register the property are instantiated). Calls to OverrideMetadata must be performed within the static constructors of the type that provides itself as the forType parameter of OverrideMetadata.
Read more here - How to override metadata?
You cannot modify UI stuff from background thread, put it on UI dispatcher like this:
App.Current.Dispatcher.Invoke(new Action(() => Run()));