Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [VB.NET] Storyboard e Sleep

    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.
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Ciao, non sono sicuro di aver capito bene, ma hai provato a lanciare un timer (quindi uscendo da StoryCompleted senza lo sleep ma avviando il timer dentro) per lanciare Story.Begin ?

  3. #3
    Non ho utilizzato alcun timer, comunque potresti spiegare meglio cosa intendi?
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Originariamente inviato da GliderKite
    Non ho utilizzato alcun timer, comunque potresti spiegare meglio cosa intendi?
    appunto al posto dello sleep, fai partire un timer e dentro il metodo chiamato dal timer (settato a 1000 ms) imposti l'inizio dell'animazione partendo dal colore scelto.

    edit :
    timer per l'attesa di 500 ms...

  5. #5
    Innanzitutto grazie per l'interessamento, con il timer funziona come dovrebbe
    Ancora non capisco però il comportamento causato dalla Sleep...
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Originariamente inviato da GliderKite
    Innanzitutto grazie per l'interessamento, con il timer funziona come dovrebbe
    Ancora non capisco però il comportamento causato dalla Sleep...
    Figurati
    Modello di threading WPF


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.