Hallo,
ich lasse eine bestimmte Aufgabe in einem extra Thread ausführen, da diese doch einige Zeit in Anspruch nimmt, die Form soll währenddessen jedoch nicht einfrieren. Wenn die Aufgabe erledigt ist, soll ein Done()-Event aufgerufen werden. Nunja, habe es mal so probiert:
Nun die Form:
Mit diesem Versuch bekomme ich folgende Exception:
So, wenn ich es nun jedoch so mache:
Dann klappt am Ende zwar alles, jedoch bin ich mir nicht sicher, ob das so die beste Lösung bzw ob das so nicht ein wenig umständlich ist. Auch hatte ich schon mal das Problem mit Application.OpenForms(0), dass wenn das Hauptfenster versteckt wurde (nicht mehr in der Taskleiste, sondern nur noch das NotifyIcon unten rechts in der Windowsleiste) ich eine Exception beim Aufruf bekam.
ich lasse eine bestimmte Aufgabe in einem extra Thread ausführen, da diese doch einige Zeit in Anspruch nimmt, die Form soll währenddessen jedoch nicht einfrieren. Wenn die Aufgabe erledigt ist, soll ein Done()-Event aufgerufen werden. Nunja, habe es mal so probiert:
Nun die Form:
Mit diesem Versuch bekomme ich folgende Exception:
Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement frmMain erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.
So, wenn ich es nun jedoch so mache:
VB.NET-Quellcode
- Public Class Test
- Public Event Done()
- Public Sub Start()
- With New Thread(AddressOf DoWork)
- .IsBackground = True
- .Start()
- End With
- End Sub
- Private Sub DoWork()
- Thread.Sleep(5000) 'soll die Aufgaben darstellen
- InvokeDone()
- End Sub
- Private Delegate Sub InvokeDoneDelegate()
- Private Sub InvokeDone()
- If Application.OpenForms(0).InvokeRequired Then
- Application.OpenForms(0).Invoke(New InvokeDoneDelegate(AddressOf InvokeDone))
- Else
- RaiseEvent Done()
- End If
- End Sub
- End Class
Dann klappt am Ende zwar alles, jedoch bin ich mir nicht sicher, ob das so die beste Lösung bzw ob das so nicht ein wenig umständlich ist. Auch hatte ich schon mal das Problem mit Application.OpenForms(0), dass wenn das Hauptfenster versteckt wurde (nicht mehr in der Taskleiste, sondern nur noch das NotifyIcon unten rechts in der Windowsleiste) ich eine Exception beim Aufruf bekam.