отображает список текущих процессов
Прочитать версию на другом языке: English
ТЗ на проект:
Необходимо написать программу "process manager" на языке C#, которая состоит из двух частей:
- UI приложение (WPF, Windows Forms, Avalonia, ..), которое показывает список запущенныхпроцессов. Однако, само приложение не должно считать этот список. Вместо этого оно запускает второе приложение (сервис) и вычитывает этот список процессов из него.
- Сервис (headless cosole application) которое запускается из основного процесса и постоянно мониторит список активных процессов в системе. Когда он меняется, сервис отправляет данные в главное приложение, чтобы оно обновило UI.
Протокол между этими двумя процессами может быть люой: stdout, text file, named pipes, protobuf, ..
Для UI использовалась Avalonia, чтобы сделать приложение кросс-платформенным. Для обменя информацией между процессами использовались Named pipes.
Программа имитирует Activity Monitor (OS X) - динамически обновляет таблицу с процессами.
- Сервис не отправляет список процессов целиком, только изменения в нём.
- ObservableCollectionsEx (Из dynamic binding) используется для динамического обновления таблицы без дополнительного кода.
- Вся информация о процессах берется из System.Diagnostics.Process.GetProcesses().
- AvaloniaUI Для UI
Решение состоит из двух частей: UI (ActiveProcessMonitor), и service (ProcessObserver). Для обмена информацией между процесами используются NamedPipeClientStream и NamedPipeServerStream из System.IO.Pipes соответственно в статических классах PipeServer и PipeClient. Они отвечают за отправку/получение изменений в списке, поэтому MainWindowView не инициализируется, пока оба процесса не подключатся к pipe.
Вид UI:

