>> Hmm - grade eine Prozessteuerung wäre evtl. mit Async doch sehr elegant. Weil das kann man programmieren wie einen sequentiellen Ablauf, also wenn du 10 Programmschritte abzuarbeiten hast, kannste das mit Async einfach in einer Schleife abhandeln, wo man mittm Timer ziemlich rumwerkeln müsste, um die Schleife in eine Art Status-Automaten zu übertragen.
Da hat mich EdR auf einen interessanten Weg gebracht. Hier folgt nun meine Umsetzung die ganz gut funktioniert und mir sehr gut gefällt. Ich habe die Idee dafür in dem Buch "VB 2012" von Doberenz gefunden. Was da genau passiert habe ich noch nicht verstanden. Auch bekomme ich die Umsetzung nur für Function und nicht für Sub hin und der Aufruf musste in drei Teile aufgeteilt werden.
Kann man eigentlich auch eine Abbruchmöglichkeit einbauen und vielleicht auch über ein Control den Stand der Bearbeitung irgendwie mitteilen?
Spoiler anzeigen
Da hat mich EdR auf einen interessanten Weg gebracht. Hier folgt nun meine Umsetzung die ganz gut funktioniert und mir sehr gut gefällt. Ich habe die Idee dafür in dem Buch "VB 2012" von Doberenz gefunden. Was da genau passiert habe ich noch nicht verstanden. Auch bekomme ich die Umsetzung nur für Function und nicht für Sub hin und der Aufruf musste in drei Teile aufgeteilt werden.
Kann man eigentlich auch eine Abbruchmöglichkeit einbauen und vielleicht auch über ein Control den Stand der Bearbeitung irgendwie mitteilen?
VB.NET-Quellcode
- Public Class Testklasse
- Private WithEvents prc As Process
- Private Reihenfolge_index As New Queue(Of Integer)
- Private Reihenfolge_info As New Queue(Of String)
- Public Sub start_queue()
- 'Queue füllen
- For i = 0 To 3
- Reihenfolge_index.Enqueue(i)
- Next
- Reihenfolge_info.Enqueue("eins")
- Reihenfolge_info.Enqueue("zwei")
- Reihenfolge_info.Enqueue("drei")
- Reihenfolge_info.Enqueue("vier")
- lange_Messung_Async1()
- End Sub
- Public Async Sub lange_Messung_Async1()
- Dim Rueckmeldung As Integer = Await lange_Messung_Async2()
- End Sub
- Public Function lange_Messung_Async2() As Task(Of Integer)
- Return Task.Factory.StartNew(Of Integer)(Function() Messablaufsteuerung())
- End Function
- Public Function Messablaufsteuerung() As Integer
- While Reihenfolge_index.Count > 0
- Select Case Reihenfolge_index.Dequeue()
- Case 0
- Console.Beep(1500, 200)
- prc = New Process
- prc.StartInfo.FileName = "notepad.exe"
- prc.Start()
- prc.WaitForExit()
- Console.WriteLine(Reihenfolge_info.Dequeue())
- Case 1
- System.Threading.Thread.Sleep(5000) ' 5 Sekunden warten
- Console.WriteLine(Reihenfolge_info.Dequeue())
- Case 2
- prc = New Process
- prc.StartInfo.FileName = "notepad.exe"
- prc.Start()
- prc.WaitForExit()
- Console.WriteLine(Reihenfolge_info.Dequeue())
- Case 3
- prc = New Process
- prc.StartInfo.FileName = "notepad.exe"
- prc.Start()
- prc.WaitForExit()
- Console.WriteLine(Reihenfolge_info.Dequeue())
- Case Else
- Console.WriteLine("error")
- End Select
- End While
- Return 0
- End Function
- End Class