From 83a7cb32b358f1605ce12e7198b5f04457ebe8b4 Mon Sep 17 00:00:00 2001 From: Simon G Date: Sun, 25 Apr 2021 19:49:42 +0200 Subject: [PATCH] - only add processes with file name - don't dispose processes --- Lib.ProcessManaging/ProcessManager.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Lib.ProcessManaging/ProcessManager.cs b/Lib.ProcessManaging/ProcessManager.cs index 750f71f..78b8812 100644 --- a/Lib.ProcessManaging/ProcessManager.cs +++ b/Lib.ProcessManaging/ProcessManager.cs @@ -52,21 +52,24 @@ namespace Lib.ProcessManaging while (!_cancellationTokenSource.IsCancellationRequested) { - foreach (var process in Process.GetProcesses()) + IEnumerable processes = Process.GetProcesses(); + foreach (var process in processes) { if (Processes.Any(p => p.EqualsProcess(process))) continue; IObservedProcess observedProcess = _observedProcessFactory.Create(process); + if (string.IsNullOrEmpty(observedProcess.FileName)) + continue; + Processes.Add(observedProcess); ProcessStarted?.Invoke(this, observedProcess); } - foreach (var observedProcess in Processes.ToList().Where(p => !Process.GetProcesses().Any(p.EqualsProcess))) + foreach (var observedProcess in Processes.ToList().Where(p => !processes.Any(p.EqualsProcess))) { Processes.Remove(observedProcess); - ProcessExited?.Invoke(this, observedProcess); //TestMe: is the passed process still usable? (disposed directly afterwards) - observedProcess.Dispose(); + ProcessExited?.Invoke(this, observedProcess); } Thread.Sleep(1000); @@ -78,7 +81,7 @@ namespace Lib.ProcessManaging public void Dispose() { - Processes.ForEach(p => p.Dispose()); + Processes.Clear(); _cancellationTokenSource.Cancel(); _cancellationTokenSource.Dispose();