vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Grafik und Font   |   VB-Versionen: VB.NET06.06.07
Threadsichere Gif-Animation II

Eine threadsichere Gif Animation mit einem BackgroundWorker

Autor:   Harald BacikBewertung:  Views:  12.459 
www.intelli-soft.atSystem:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Ich habe vor einiger Zeit eine Klasse geschrieben, die zeigt, wie man mit dem Aufruf von Thread eine Animation starten kann, so dass diese während einer Arbeit im Hintergrund läuft. Heute möchte ich euch den selben Tipp noch einmal näher bringen, diesmal aber mit der in .NET 2.0 enthaltenen BackgroundWorker Komponente.

#Region " GIF Animation in einer Picturebox "
Public Class Animation
  Private AniPictureBox As PictureBox
  Private AniImage As Bitmap
  ' In der Eigenschaft PBoxProperty wird die zu 
  ' verwendende PictureBox hinterlegt
  Private Property PBoxProperty() As PictureBox
    Get
      Return AniPictureBox
    End Get
    Set(ByVal value As PictureBox)
      AniPictureBox = value
    End Set
  End Property
  ' In der Eigenschaft Imapge Property wird die zu 
  ' verwendende Animation hinterlegt
  Private Property ImageProperty() As Bitmap
    Get
      Return AniImage
    End Get
    Set(ByVal value As Bitmap)
      AniImage = value
    End Set
  End Property
 
  Public Sub Animation(ByVal PBox As PictureBox, _
    ByVal AnimationImage As Bitmap)
 
    ' Die Zuweisung der Eigenschaften
    PBoxProperty = PBox
    ImageProperty = AnimationImage
 
    ' Einen neuen BackgroundWorker erstellen
    ' (Achtung: Erst ab .NET 2.0)
    Dim BackGroundW As New System.ComponentModel.BackgroundWorker
 
    ' Hier fragen wir ab, ob der BackgroundWorker schon 
    ' gestartet(wurde)
    If BackGroundW.IsBusy = False Then
      ' Die Zuweisung der DoWork Eigenschaft, dies muss man machen, 
      ' da wir den BackgroundWorker selbst definieren & nicht aus 
      ' der ToolBox ziehen
      AddHandler BackGroundW.DoWork, AddressOf bkgDoWork
      ' Den BackgroundWorker (die Animation) starten
      BackGroundW.RunWorkerAsync()
    Else
      ' Den Handler wieder löschen
      RemoveHandler BackGroundW.DoWork, AddressOf bkgDoWork
      ' Den BackgroundWorker (die Animation) beenden
      BackGroundW.CancelAsync()
      ' Den BackgroundWorker zerstören & aus dem Speicher löschen
      BackGroundW.Dispose()
    End If
  End Sub
 
  ' Hier wird der Code ausgeführt, der bei RunWorkerAsync 
  ' normalerweise auf die DoWork Prozedur verweist.
  Private Sub bkgDoWork(ByVal sender As System.Object, _
    ByVal e As System.ComponentModel.DoWorkEventArgs)
 
    ' Der PictureBox die Animation zuweisen
    PBoxProperty.Image = ImageProperty
  End Sub
End Class
#End Region

Um den Code jetzt auszuführen, bedarf es nur mehr den Aufruf:

Dim Animation As New Animation
Animation.Animation(PictureBox1, _
New Bitmap(Application.StartupPath & "\myAniGif.gif"))
 
' Hier wird der längere Code gemanaged
 
' ...
 
' Nochmal die Animation aufrufen, damit sie wider gestoppt wird
Animation.Animation(PictureBox1, Nothing)

So, viel Spaß damit, hoffe den einen oder anderen kann ich damit behilflich sein.
 



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.