Skip to content

Latest commit

 

History

History
64 lines (39 loc) · 3.68 KB

File metadata and controls

64 lines (39 loc) · 3.68 KB

Active Process Monitor

отображает список текущих процессов

Прочитать версию на другом языке: English

Содержание
  1. Про проект
  2. Использование

Про проект

ТЗ на проект:

Необходимо написать программу "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().

Используемые пакеты

Структура Проекта

Решение состоит из двух частей: UI (ActiveProcessMonitor), и service (ProcessObserver). Для обмена информацией между процесами используются NamedPipeClientStream и NamedPipeServerStream из System.IO.Pipes соответственно в статических классах PipeServer и PipeClient. Они отвечают за отправку/получение изменений в списке, поэтому MainWindowView не инициализируется, пока оба процесса не подключатся к pipe.

Использование

Вид UI:

alt text alt text