При использовании IProgress для отчета о ходе выполнения
должен ли код сообщать о прогрессе ограничивать свои отчеты о ходе выполнения с "разумной" частотой -или-
ответственность за конкретную реализацию IProgress, чтобы осознавать, что отчеты о ходе работы могут быть несвоевременными. более высокая частота, чем разумно для того, как он будет представлять этот прогресс.
Контекст вопроса: у меня есть код, который использует IProgress , чтобы сообщить о прогрессе, и он сообщает о прогрессе с очень высокой скоростью. Я хочу отображать прогресс с помощью индикатора выполнения пользовательского интерфейса. Если я использую предоставленную реализацию Progress (которая сообщает о прогрессе в UI SyncronizationContext), то это приводит к тому, что пользовательский интерфейс не отвечает (т. е. в очередь сообщений отправляется так много сообщений, что пользователь даже не может нажать кнопку «Отмена» в диалоговом окне).
Итак,
Я мог бы исправьте это, сообщая меньше, но что, если бы у меня была реализация IProgress, которая просто записывала прогресс в файл журнала (и могла бы обрабатывать высокую частоту отчетов). -или-
Я мог бы исправить это, создав свою собственную реализацию IProgress, которая ограничивала бы частоту обработки/отчета о прогрессе. Предположительно, эта реализация будет записывать последний прогресс в потоке, не связанном с пользовательским интерфейсом, а затем (возможно) пользовательский интерфейс будет обновляться по таймеру.
При использовании IProgress для отчета о ходе выполнения [list] [*]должен ли код сообщать о прогрессе ограничивать свои отчеты о ходе выполнения с "разумной" частотой -или- [*]ответственность за конкретную реализацию IProgress, чтобы осознавать, что отчеты о ходе работы могут быть несвоевременными. более высокая частота, чем разумно для того, как он будет представлять этот прогресс. [/list] Контекст вопроса: у меня есть код, который использует IProgress , чтобы сообщить о прогрессе, и он сообщает о прогрессе с очень высокой скоростью. Я хочу отображать прогресс с помощью индикатора выполнения пользовательского интерфейса. Если я использую предоставленную реализацию Progress (которая сообщает о прогрессе в UI SyncronizationContext), то это приводит к тому, что пользовательский интерфейс не отвечает (т. е. в очередь сообщений отправляется так много сообщений, что пользователь даже не может нажать кнопку «Отмена» в диалоговом окне). Итак, [list] [*]Я мог бы исправьте это, сообщая меньше, но что, если бы у меня была реализация IProgress, которая просто записывала прогресс в файл журнала (и могла бы обрабатывать высокую частоту отчетов). -или- [*]Я мог бы исправить это, создав свою собственную реализацию IProgress, которая ограничивала бы частоту обработки/отчета о прогрессе. Предположительно, эта реализация будет записывать последний прогресс в потоке, не связанном с пользовательским интерфейсом, а затем (возможно) пользовательский интерфейс будет обновляться по таймеру. [/list]