|
|
|
@ -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(); |
|
|
|
|