Hallo^^ Ich habe nur eine Frage zu folgendem. Die Klasse Process implementiert IDisposable und daher sollte man Dispose aufrufen oder ein using Statement benutzen. Nun möchte ich einen Autostarter für Prozesse programmieren. Der lädt einfach die Zeilen aus einer csv Datei aus. In einer Zeile steht der Pfad zur exe Datei und ein bool Wert, ob diese exe von meinem Autostarter gestartet werden soll und noch ein bool Wert (IsBackground), ob der Autostarter warten soll, bis das Programm beendet ist. Wenn IsBackground true ist, dann soll der Autostarter nicht warten und den nächsten Prozess/das nächste Programm starten.
foreach (var program in programs)
{
using var process = Process.Start(new ProcessStartInfo
{
// ...
});
if (!program.IsBackground)
process?.WaitForExit();
}
Wenn es kein Hintergrundprogramm ist, dann kann der Autostarter auf das Programm warten und Dispose aufrufen. Aber wie gehe ich in dem anderen Fall, dass es einer ist damit um?
Du speicherst dir die Referenz, abonnierst das Process.Exited Ereignis (System.Diagnostics) und rufst im Handler Dispose auf.
Im einfachsten fall machst du dies entweder in dem du mit Parallel.ForEach arbeitest, dann kann deine Methode über Tasks aufgerufen werden.
Oder wenn du es selbst steuern will, in dem du z.B. eine StartProgramAsync Methode anlegst, die dann einen Task liefert.
Somit können die Programme asychron gestartet werden.
Doku Asychnrone Programmierung
Doku Parallel.ForEach
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Hallo T-Virus,
sicher dass hier Parallel.ForEach
hier angebracht ist?
Ich finde den Vorschlag von dannoe da passender.
Das könnte dann beliebig ausgebaut werrden. Z.B. mit einer TaskCompletionSource so dass ein Task vorhanden ist. Od. so dass await
möglich ist, usw.
Aber für die Aufgabenstellung ist dannoes Vorschlag einfach und effektiv -- mehr braucht es nicht.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
@gfoidl
Hatte den Ansatz falsch verstanden.
Ich hatte gedacht, es geht nur darum die Prozesse parallel zu starten ohne zu warten.
Macht dann tatsächlich keinen Sinn.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.