| |
| In diesem Forum haben Sie die Möglichkeit Kommentare, Fragen und Verbesserungsvorschläge zu den im vb@rchiv gelisteten Tipps und Workshops zu posten.
Hinweis: Ein neues Thema kann immer nur über die jeweilige Tipps & Tricks bzw. Workshop Seite eröffnet werden! | Fragen zu Tipps & Tricks und Workshops im vb@rchivTipp 1644: Threadsichere Gif-Animation II | | | Autor: Nasenzwerg | Tipp anzeigenDatum: 16.02.10 14:46 |
| Hi,
das wäre ne nette Sache.
Aber bei mir tut sich gar nix.
Ich habe den Code in eine neue Klasse eingefügt und dann verwendet, aber nichts passiert
Private Sub btnCopy_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnCopy.Click
Dim oSource As String = tbSource.Text
Dim oTarget As String = tbTarget.Text & "\" & _
System.IO.Path.GetFileName(tbSource.Text)
Dim Animation As New Animation
PictureBox1.Visible = True
PictureBox1.Refresh()
Animation.Animation(PictureBox1, _
New Bitmap(Application.StartupPath & "\mygif.gif"))
'Bildchen anzeigen
Try
System.IO.File.Copy(oSource, oTarget, True)
Catch ex As Exception
MessageBox.Show("Fehler beim Kopieren!", "Fehler", _
MessageBoxButtons.OK)
End Try
' Nochmal die Animation aufrufen, damit sie wider gestoppt wird
Animation.Animation(PictureBox1, Nothing)
PictureBox1.Visible = False
End Sub Die Gif-Datei ist natürlich vorhanden, mit F8 kann ich durch die Klasse steppen, die wird also gefunden und verwendet. Aber das Bild bewegt sich beim Kopieren nicht.
Ich habe vb.net 2008 Express, aber das sollte wohl kein Problem sein.
Ciao
Klaus | |
Re: Threadsichere Gif-Animation II | | | Autor: Zero-G. | Datum: 19.02.10 13:13 |
| Hallo
Ist ja schon länger her...
Du solltest
Try
System.IO.File.Copy(oSource, oTarget, True)
Catch ex As Exception
MessageBox.Show("Fehler beim Kopieren!", "Fehler", _
MessageBoxButtons.OK)
End Try in eine Backgroundworker Klasse verlegen / oder auch als eigenen Thread. - Das müsste funktionieren.
Wobei ich mir nicht sicher bin, ob System.IO.File.Copy Thread sicher ist oder nicht... - Musst mal schauen, ob es einen asynchronen aufruf dafür gibt. - Hab leider im Moment kein VB zur Hand.
mfg | |
Re: Threadsichere Gif-Animation II | | | Autor: Nasenzwerg | Datum: 22.02.10 09:31 |
| Hi,
es funktioniert zwar, aber:
Das Kopieren wird ausgeführt, ich habs mit
System.IO.File.Copy als auch mit
My.Computer.FileSystem.CopyFile getestet.
Aber: Der Kopierjob läuft dann (natürlich) komplett im Hintergrund ab, das Hauptprogramm ist dann sofort wieder bereit und kann sogar beendet werden, das Kopieren läuft weiter. Einerseits schön- andererseits schlecht: Ich habe im Hauptprogramm auch keine Rückmeldung mehr.
Um sowas zu verhindern, muss ich also in der Background-Sub sozusagen das Hauptprogramm kontrollieren:
Die Animation starten und stoppen (funktioniert),
Beenden des Programms verhindern indem der Exit-button vorher disabled wird, wird aber schwierig: Ich kann in dem Background-Thread _normalerweise_ keine Buttons wieder enablen.
Das muss ich- ums richtig zu machen- "threadsicher" machen. Dazu gibts ein Beispiel zu Textboxen. Wie das aber auf die enabled-Eigenschaft von Controls anzuwenden ist, ist mir unklar.
Oder ich mach das "thread-unsafe", indem ich CheckForIllegalCrossThreadCalls auf false setze. Was sicher nicht die feine Art ist, aber einfacher. Und es funktioniert. Also mach ich das erstmal unschönerweise einfach so | |
Re: Threadsichere Gif-Animation II | | | Autor: Nasenzwerg | Datum: 22.02.10 16:10 |
| Ehrlich gesagt: Das erschlägt mich jetzt. Und ist für meinen kleine Copy-Zweck auch mit Kanonen auf Spatzen geschossen, da verzichte ich lieber auf die Animation beim Kopieren.
Und außerdem: Ich brauche wirklich einen Kopier-Vorgang, bei dem z.B. der Timestamp der Datei gleich bleibt. Mit Read&Write bekomme ich ja eine neue Datei.
Aber danke für die Tipps | |
Re: Threadsichere Gif-Animation II | | | Autor: asam | Datum: 07.04.10 10:42 |
| Hallo,
ich komme leider auch nicht wirklich weiter.
picWaitGif.Visible = True
Dim animation As New Animation
animation.Animation(picWaitGif, _
New Bitmap(Application.StartupPath & "\wait_ani.gif"))
'MsgBox("Einmal angehalten, dann geht's") ' weiß aber nicht warum
senden() ' zählt nur zum simulieren eines längeren Vorganges
'Dim post As New sendMail(dbsDataSource, tblFehler, "fhlKennung", selArray)
'Dim threadStart As New Threading.ThreadStart(AddressOf post.Senden)
'Dim thread As New Threading.Thread(threadStart)
'thread.Start()
animation.Animation(picWaitGif, Nothing)
picWaitGif.Visible = False Scheinbar passiert erst einmal nichts. Erst wenn ich die MsgBox aktiviere kann ich sehen was passiert. Die Animation läuft, senden() rechnet (leider bleibt dabei die Animation stehen) und die Animation wird "ausgeschaltet". Ohne MsgBox ist die Animation nicht zu sehen.
Dann habe ich versucht die sub senden() in einen eigenen thread zu verpacken ... ohne MsgBox ist keine Animation zu sehen.
In meinem kleinen Programm könnte ich eine solche schöne Funktion an vielen Stellen gut gebrauchen. Möglicherweise fehlt mir nur die passende Idee wie ich das bei mir richtig zum Laufen bringe.
Für jede Hilfe dankbar.
Gru? asam | |
| Sie sind nicht angemeldet! Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevWizard für VB5/6
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|