Я полагаю, это потому, что в вашем коде нет никакой связи, созданной между часами анимации раскадровки и TextBlock's Text DependencyProperty. если бы мне пришлось угадывать, я бы сказал, когда раскадровка расшатывается, это происходило в несколько случайное время из-за загрязнения конвейера обновления DependencyProperty (TextBlock.Text является DependencyProperty). Создание такой ассоциации, как показано ниже (будет работать либо RunTimeline, либо RunStoryboard, но покажите альтернативные способы рассмотрения этого):
public partial class Window1 : Window
{
Storyboard a = new Storyboard();
StringAnimationUsingKeyFrames timeline = new StringAnimationUsingKeyFrames();
DiscreteStringKeyFrame keyframe = new DiscreteStringKeyFrame();
int i;
public Window1()
{
InitializeComponent();
//RunTimeline();
RunStoryboard();
}
private void RunTimeline()
{
timeline.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(TextBlock.Text)"));
timeline.Completed += timeline_Completed;
timeline.Duration = new Duration(TimeSpan.FromMilliseconds(10));
textblock.BeginAnimation(TextBlock.TextProperty, timeline);
}
private void RunStoryboard()
{
timeline.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(TextBlock.Text)"));
a.Children.Add(timeline);
a.Completed += a_Completed;
a.Duration = new Duration(TimeSpan.FromMilliseconds(10));
a.Begin(textblock);
}
void timeline_Completed(object sender, EventArgs e)
{
textblock.Text = (++i).ToString();
textblock.BeginAnimation(TextBlock.TextProperty, timeline);
}
void a_Completed(object sender, EventArgs e)
{
textblock.Text = (++i).ToString();
a.Begin(textblock);
}
}
Это работает для меня до тех пор, пока я позволяю ему работать (примерно в 10 раз дольше, чем когда-либо, чтобы отключиться).
Тим