Seiten

Freitag, 4. Februar 2011

Zweite Alternative: Storyboard soll nicht beginnen, bevor die Silverlight-Anwendung vollständig geladen ist

Hierzu hatte ich vor einiger Zeit schon einmal einen kurzen Artikel geschrieben. Das Problem ist bekannt: Ein Storyboard soll nicht starten, bevor die Anwendung vollständig geladen und sichtbar ist. Dieser Artikel zeigt eine andere, alternative Lösung auf.

Diese alternative Lösung nutzt eine Eigenschaft des SilverlightHost. Das ist die Eigenschaft "IsLoaded". Diese Eigenschaft zeigt an, ob das gehostete "Silverlight-Plug-In" den Ladevorgang vollständig abgeschlossen hat.

Hier ist der betreffende Quellcode von MainPage.xaml.vb:

Public Sub New()


  InitializeComponent()


  pd = New DispatcherTimer With {.Interval = TimeSpan.FromMilliseconds(100)}

  AddHandler pd.Tick, AddressOf CheckLoadedStatus

  pd.Start()


End Sub

Private pd As DispatcherTimer

Private Sub CheckLoadedStatus(ByVal sender As Object, ByVal e As EventArgs)


  If App.Current.Host.IsLoaded = True Then

    pd.Stop()

    RemoveHandler pd.Tick, AddressOf CheckLoadedStatus

    sbMove.Begin()

  End If


Die Vorgehensweise ist total einfach. Im Konstruktor von MainPage wird ein DispatcherTimer mit einem Intervall von 100ms erzeugt. Die Routine "CheckLoadedStatus" hängt sich an das Tick-Ereignis des DispatcherTimers. Der DispatcherTimer wird gestartet. Die Methode "CheckLoadedStatus" überprüft alle 100ms den Wert von App.Current.Host.IsLoaded. Sobald der Wert auf "True" geht, wird der DispatcherTimer angehalten, der Delegat entfernt und das Storyboard gestartet.

Total simpel und es funktioniert garantiert.

Keine Kommentare:

Kommentar veröffentlichen