private void ManageProcesses() { var windowedProcesses = WindowsShell.GetWindowsByProcessId(); //log.Debug("Processes found were " + string.Join(", ", windowedProcesses.Keys)); var removedProcessKeys = _processSet.Except(windowedProcesses.Keys).ToHashSet(); var addedProcessKeys = windowedProcesses.Keys.Except(_processSet).ToHashSet(); var addedEventArgs = addedProcessKeys.Count > 0 ? new ProcessChangedEventArgs(addedProcessKeys) : null; var removedEventArgs = removedProcessKeys.Count > 0 ? new ProcessChangedEventArgs(removedProcessKeys) : null; _processSet = windowedProcesses.Keys.ToHashSet(); if (addedEventArgs != null) { log.Info("System detected that processes were added. Raising event..."); ProcessesAddedEvent?.Invoke(this, addedEventArgs); } if (removedEventArgs != null) { log.Info("System detected that processes were removed. Raising event..."); ProcessesRemovedEvent?.Invoke(this, removedEventArgs); } }
private void SystemEventsOnDisplaySettingsChanged(object sender, EventArgs e) { log.Info("Desktop settings changed. Triggering a hard update..."); Stop(); // Snapshot all process var allApps = new ProcessChangedEventArgs(new HashSet <int>(_processSet)); // Trigger a notification to remove all of them ProcessesRemovedEvent?.Invoke(this, allApps); _processSet.Clear(); // Restart the timer to force a re-trigger of all placements Start(); }