VB.Net - Powershell - CancelAsync BGW
Hallo zusammen,
ich musste mein Programm leicht umändern, sodass Listen, anstatt in VB.Net nun über Powershell erzeugt werden. Trotzdem wird alles noch per vb.net application gesteuert.
Nun bin ich aber auf folgendes Problem gestoßen. Ich habe die Ausführung des Powershell Skripts in die Methode DoWork eines Backgroundworkers gepackt.
In dem Programm gibt es einen Abbrechen Button. Dieser Triggert dann die Funktion BGW.CancelAsync()
Allerdings läuft das Powershell Skript trotzdem weiter, da dieses soweit nichts mit der vb application zu tun hat oder sehe ich das falsch und es müsste funktionieren?
Und eine weitere Frage, immer wenn das PS Skript eine Liste fertig hat, kann ich dann einen Rückgabewert 1 an die vb.net application übergeben damit die ProgressBar was zum verarbeiten hat?
Vielen Dank im Voraus.
ich musste mein Programm leicht umändern, sodass Listen, anstatt in VB.Net nun über Powershell erzeugt werden. Trotzdem wird alles noch per vb.net application gesteuert.
Nun bin ich aber auf folgendes Problem gestoßen. Ich habe die Ausführung des Powershell Skripts in die Methode DoWork eines Backgroundworkers gepackt.
Private Sub BGW_DoWork(sender As Object, e As DoWorkEventArgs) Handles BGW.DoWork
Dim PathToday As String
PathToday = "\\Vdm-11\lup-daten\FD_50_Bank\Einrichtungen_Zahllisten\" _
& Format(DateTimePicker1.Value, "yyyy") & "\" & Format(DateTimePicker1.Value, "MM-yyyy") & "\" & Format(DateTimePicker1.Value, "dd-MM-yyyy") & "\" ' & FileName & "\"
' Wenn Ausgabeverzeichnis noch nicht existiert, dann erstellen
If Not (Directory.Exists(PathToday)) Then
Directory.CreateDirectory(PathToday)
End If
Dim proc As Process
Dim procStartInfo As ProcessStartInfo
procStartInfo = New ProcessStartInfo
procStartInfo.FileName = "powershell.exe"
procStartInfo.Arguments = "-File H:\Entwicklung\Zahllaufkalender\Zahllaufkalender\Zahllaufkalender\bin\Debug\Skripts\ZahllistenErstellen.ps1 -PfadText " & txtBoxFile.Text.ToString & " -Speicherpfad " & PathToday
proc = Process.Start(procStartInfo)
proc.WaitForExit()
MsgBox("Fertig")
End Sub
In dem Programm gibt es einen Abbrechen Button. Dieser Triggert dann die Funktion BGW.CancelAsync()
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
BGW.CancelAsync()
End Sub
Allerdings läuft das Powershell Skript trotzdem weiter, da dieses soweit nichts mit der vb application zu tun hat oder sehe ich das falsch und es müsste funktionieren?
Und eine weitere Frage, immer wenn das PS Skript eine Liste fertig hat, kann ich dann einen Rückgabewert 1 an die vb.net application übergeben damit die ProgressBar was zum verarbeiten hat?
Vielen Dank im Voraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 502239
Url: https://administrator.de/forum/vb-net-powershell-cancelasync-bgw-502239.html
Ausgedruckt am: 06.05.2025 um 00:05 Uhr
1 Kommentar

Allerdings läuft das Powershell Skript trotzdem weiter, da dieses soweit nichts mit der vb application zu tun hat oder sehe ich das falsch und es müsste funktionieren?
Nein die Funktion der Methode CancelAsync ist eine andere als du vermutest, den Text zur Methode mal genau lesen:https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.backgr ...
CancelAsync submits a request to terminate the pending background operation and sets the CancellationPending property to true.
When you call CancelAsync, your worker method has an opportunity to stop its execution and exit. The worker code should periodically check the CancellationPending property to see if it has been set to true.
kann ich dann einen Rückgabewert 1 an die vb.net application übergeben damit die ProgressBar was zum verarbeiten hat?
Ja. ExitCode Property des Process Objects abfragen und dann mit BeginInvoke und/oder Delegates dein Control updaten:https://blogs.msdn.microsoft.com/make_it_better/2017/05/15/updating-wind ...