/// <summary> /// Обновление интерфейса в соответствии со списком процессов /// </summary> private void UpdateInterface() { int scrollTo = processGridView.FirstDisplayedScrollingRowIndex; long pid = -1; if (processBindingSource.Current != null) { pid = ((Process)processBindingSource.Current).Id; } processList = ProcessList.TryGetInstance(); if (processList != null && processList.List.Count > 0) { processBindingSource.Clear(); foreach (Process p in processList.List) { processBindingSource.Add(p); } ProcessList.Unlock(); int position = 0; for (int i = 0; i < processBindingSource.Count; i++) { if (((Process)processBindingSource[i]).Id == pid) { position = i; } } processBindingSource.Position = position; processGridView.FirstDisplayedScrollingRowIndex = Math.Min(processGridView.RowCount, Math.Max(0, scrollTo)); totalProcessToolStripStatusLabel.Text = processBindingSource.Count.ToString(); } else { LogClass.GetInstance().Warn("Список процессов заблокирован для доступа"); } }
/// <summary> /// Обновляет список процессов, логирует изменения в списке процессов /// </summary> public static void Update() { ProcessList pl = ProcessList.TryGetInstance(); if (pl != null) { pl.List.Clear(); foreach (var p in Process.GetProcesses().ToList()) { pl.List.Add(p); } pl.List.Sort(delegate(Process a, Process b) { return(a.ProcessName.CompareTo(b.ProcessName)); }); processDiffer.Add(pl.List); ProcessList.Unlock(); processDiffer.CompareHashes(); } }