- only add processes with file name

- don't dispose processes
master
Simon G 5 years ago
parent 62f9d7937e
commit 83a7cb32b3
  1. 13
      Lib.ProcessManaging/ProcessManager.cs

@ -52,21 +52,24 @@ namespace Lib.ProcessManaging
while (!_cancellationTokenSource.IsCancellationRequested) while (!_cancellationTokenSource.IsCancellationRequested)
{ {
foreach (var process in Process.GetProcesses()) IEnumerable<Process> processes = Process.GetProcesses();
foreach (var process in processes)
{ {
if (Processes.Any(p => p.EqualsProcess(process))) if (Processes.Any(p => p.EqualsProcess(process)))
continue; continue;
IObservedProcess observedProcess = _observedProcessFactory.Create(process); IObservedProcess observedProcess = _observedProcessFactory.Create(process);
if (string.IsNullOrEmpty(observedProcess.FileName))
continue;
Processes.Add(observedProcess); Processes.Add(observedProcess);
ProcessStarted?.Invoke(this, 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); Processes.Remove(observedProcess);
ProcessExited?.Invoke(this, observedProcess); //TestMe: is the passed process still usable? (disposed directly afterwards) ProcessExited?.Invoke(this, observedProcess);
observedProcess.Dispose();
} }
Thread.Sleep(1000); Thread.Sleep(1000);
@ -78,7 +81,7 @@ namespace Lib.ProcessManaging
public void Dispose() public void Dispose()
{ {
Processes.ForEach(p => p.Dispose()); Processes.Clear();
_cancellationTokenSource.Cancel(); _cancellationTokenSource.Cancel();
_cancellationTokenSource.Dispose(); _cancellationTokenSource.Dispose();

Loading…
Cancel
Save