Внедрение монитора прогресса в C # - PullRequest
2 голосов
/ 30 марта 2009

В Eclipse я видел реализацию IProgressMonitor - которая впоследствии тоже в SharpDevelop, но я не уверен, как это работает. Есть ли пример этого в другом месте, который может быть немного легче понять?

То, чего я пытаюсь добиться, - это метод отслеживания хода выполнения группы задач (которые сильно варьируются от 20 минут до 5 секунд) по одной панели прогресса (задачи можно добавлять в любой момент времени).

Будет ли что-то подобное хорошей альтернативой / идеей?

interface ITask
{
    int TotalWork; // ProgressMax
    event Progresschanged; // Notifies of the current progress
    event ProgressComplete;
}

Тогда «Монитор» просто использует шаблон Observer для мониторинга двух событий. Когда все индикаторы выполнения завершены, он будет скрывать индикатор выполнения. Другая проблема заключается в том, что это отдельные потоки, которые создаются.

Может ли кто-нибудь дать мне совет или привести меня на правильный путь?

Ответы [ 2 ]

2 голосов
/ 25 июня 2009

Вести список задач и взвесить их по их общему вкладу;

struct Task { int work, progress  }
class OverallProgress
{
    List<Task> tasks;
    int Work { get { return tasks.Sum(t=>t.work; } }
    int Progress { get { return tasks.Sum(t=>t.progress/t.work); } }
    void AddTask(Task t) { tasks.Add(t); }
}

Эта реализация предназначена только для иллюстрации концепции .

Да, эта реализация неэффективна. Вы можете сохранить вычисленное значение Work, чтобы пересчитать его только при добавлении нового задания.

Да, вы можете потерять точность, выполнив целочисленное деление. Тебе тоже придется подключать свои собственные события.

Если у вас возникли проблемы с этими задачами, пожалуйста, отметьте это, и я или кто-то еще можем предоставить полную реализацию такого класса.

1 голос
/ 30 марта 2009

System.Component.BackgroundWorker обрабатывает уведомления о прогрессе. Я бы породил несколько рабочих BG и заставил бы их отчитываться перед одним методом в потоке пользовательского интерфейса. Затем вы можете обновить свой индикатор выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...