Ho ricreato una Storyboard basata su un'animazione ColorAnimation, tra i vari parametri ho associato alla durata dell'animazione un valore (ad esempio 1 secondo):

codice:
Story = New Storyboard
ColAnimation = New ColorAnimation
ColAnimation.Duration = TimeSpan.FromSeconds(1)
Storyboard.SetTargetProperty(ColAnimation, New PropertyPath(GradientStop.ColorProperty))
Story.Children.Add(ColAnimation)
Registro poi il GradientStop che verrà modificato nel corso dell'animazione:

codice:
Me.RegisterName("GradStop", GradStop)        
Storyboard.SetTargetName(ColAnimation, "GradStop")
Avendo associato l'evento Completed della storyboard al metodo StoryCompleted:

codice:
AddHendler Story.Completed, AddressOf StoryCompleted

Private Sub StoryCompleted(sender As Object, e As EventArgs)
       
End Sub

Do inizio all'animazione con:

codice:
ColAnimation.To = Color.Black
Story.Begin(containingObject, True)
dove, containingObject è un controllo il cui background è proprio costituito dal GradientStop che l'animazione intende modificare, e il colore a cui si vuole "arrivare" è in questo caso il nero.


Dopo tutta questa introduzione passiamo al problema vero e proprio. Io desidero avere la possibilità di dar origine ad una nuova animazione, verso un nuovo colore, una volta completata la prima, quindi nel metodo StoryCompleted aggiungo:

codice:
Private Sub StoryCompleted(sender As Object, e As EventArgs)
       ColAnimation.To = Color.White
       Story.Begin(containingObject, True)
End Sub
E fin qui tutto ok, tuttavia avrei anche la necessità di aspettare di lanciare la seconda animazione. Per farlo avevo pensato ad una Sleep (anche perchè le risorse che richiedono le animazioni, soprattutto se si considera che possono essere utilizzati decine di controlli contemporaneamente che eseguono animazioni nello stesso tempo). Quindi supponendo di voler aspettare 0.5 secondi prima di far cominciare la seconda animazione ho provato con:

codice:
Private Sub StoryCompleted(sender As Object, e As EventArgs)
       ColAnimation.To = Color.White
       Thread.Sleep(500)
       Story.Begin(containingObject, True)
End Sub
In questo modo quello che avrei voluto ottenere sarebbe stato: 1 secondo per passare al colore nero mediante la prima animazione, 0.5 secondi di attesa prima di avviare la seconda animazione ed infine 1 secondo per passare al bianco mediante la seconda animazione. tuttavia la storyboard si comporta come segue: 1 secondo per la prima animazione, 0.5 secondi per l'attesa e 0.5 secondi per la seconda animazione (quindi notevolmente accelerata).

Non riesco a trovare una spiegazione a questo comportamento, è come se i secondi di attesa fossero stati sottratti alla seconda animazione, che teoricamente non è nemmeno iniziata. Potete aiutarmi a risolvere il problema? Grazie.