Hallo,
ich suche mich schon seit Tagen durch das Internet und Foren aber finde keine passende Lösung für mein Problem, obwohl ich denke so schwer kann es nicht sein.
Ich habe eine Array mit Benutzernamen und PC-Namen und ein Feld mit Text. Jetzt soll ein Befehl an jeden Benutzer des Array eine Nachricht schicken mit "MSG.exe" und auswerten ob derjenige die Meldung weg geklickt hat. An sich klappt das versenden und auswerten soweit ABER ich kriege es nicht hin, das gewartet wird, bis alle die Nachricht geschlossen haben oder das System die Meldung automatisch nach 60 Sekunden schließt. Der Consolenprozess wartet ab bis der Benutzer die Meldung mit "OK" weg klickt oder schließt sie von alleine nach 60 Sek.
Ich dachte mit Task.Waitall wartet er bis alles fertig ist und dann macht er weiter aber er wartet auf nichts. Habe auch schon den ausführenden Code in eine eigene Async Sub geschrieben und die über Task.run aufgerufen aber das selbe Problem. Entweder wartet er jede einzelne For each Schleife ab oder er arbeitet alles komplett ab stoppt nicht bei Task.WaitAll().
Hier ein Ausschnitt von meinem Code
ich suche mich schon seit Tagen durch das Internet und Foren aber finde keine passende Lösung für mein Problem, obwohl ich denke so schwer kann es nicht sein.
Ich habe eine Array mit Benutzernamen und PC-Namen und ein Feld mit Text. Jetzt soll ein Befehl an jeden Benutzer des Array eine Nachricht schicken mit "MSG.exe" und auswerten ob derjenige die Meldung weg geklickt hat. An sich klappt das versenden und auswerten soweit ABER ich kriege es nicht hin, das gewartet wird, bis alle die Nachricht geschlossen haben oder das System die Meldung automatisch nach 60 Sekunden schließt. Der Consolenprozess wartet ab bis der Benutzer die Meldung mit "OK" weg klickt oder schließt sie von alleine nach 60 Sek.
Ich dachte mit Task.Waitall wartet er bis alles fertig ist und dann macht er weiter aber er wartet auf nichts. Habe auch schon den ausführenden Code in eine eigene Async Sub geschrieben und die über Task.run aufgerufen aber das selbe Problem. Entweder wartet er jede einzelne For each Schleife ab oder er arbeitet alles komplett ab stoppt nicht bei Task.WaitAll().
Hier ein Ausschnitt von meinem Code
VB.NET-Quellcode
- Private Async Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
- Dim selectedRowCount As Integer = DataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected)
- Dim Computer, User, Nachricht As String
- Dim i, n, anzahl As Integer
- n = 0
- anzahl = selectedRowCount
- abgeschlossen = 0
- If selectedRowCount > 0 Then
- Await Task.Run(async Sub()
- For i = 0 To selectedRowCount - 1
- Using ConsoleProcess As New Process
- ConsoleProcess.StartInfo.CreateNoWindow = True
- ConsoleProcess.StartInfo.FileName = "cmd.exe"
- ConsoleProcess.StartInfo.RedirectStandardOutput = True
- ConsoleProcess.StartInfo.RedirectStandardInput = True
- ConsoleProcess.StartInfo.UseShellExecute = False
- ConsoleProcess.Start()
- Start = Now
- Await ConsoleProcess.StandardInput.WriteLineAsync("c:\tools\msg.exe /w /v " & User & " /SERVER:" & Computer & " ""Von: " & GlobalVariables.Username & " | " & Nachricht & """")
- Await ConsoleProcess.StandardInput.WriteLineAsync("exit")
- ConsoleProcess.WaitForExit()
- Ende = Now
- End Using
- End Sub)
- Next i
- Task.WaitAll
-