Ookii-dialogs-wpf: ProgressDialog должен реализовать Progress<t/>

Созданный на 25 мар. 2020  ·  4Комментарии  ·  Источник: ookii-dialogs/ookii-dialogs-wpf

было бы очень полезно, если бы ProgressDialog реализовал эти интерфейсы:

System.IProgress<int> чтобы сообщить процент прогресса
System.IProgress<Text> чтобы сообщить о текстовом прогрессе

Таким образом, объект ProgressDialog может быть передан как простой объект выполняющимся заданиям и преобразован в IProgress<int> и IProgress<Text> для отчетов о ходе выполнения.

enhancement help wanted

Все 4 Комментарий

Спасибо @vpenades , звучит как отличная идея.

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

PR готов ...

@vpenades Ookii.Dialogs.Wpf теперь поддерживает .NET 5, а также .NET Core 3.1, поэтому я подумал, что пингую вас, если вы когда-нибудь захотите начать обсуждение возможных улучшений реализации IProgress<T>

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

Вариантом использования в большинстве случаев будут фоновые задачи, инициализированные с помощью значения Object, которое может быть приведено к нескольким версиям IProgress<T> чтобы они могли сообщать о ходе выполнения задачи backgrond.

Я думаю, что интерфейс широко не используется, потому что он не очень хорошо известен, но поскольку IProgress<T> существует уже довольно давно, я провел небольшой поиск, чтобы узнать, как люди его используют, и обнаружил:

`` С #
IProgress// прогресс сообщается в значениях от 0 до 1
IProgress// прогресс сообщается в значениях от 0 до 100


It is very tempting to have a structure that keeps all the information required by the progress dialog (percent, text, description), but this _must be avoided_  because that would mean the caller needs to fill that structure, which would force it to have a dependency on the ookii library, this is probably not desirable for background tasks, or pure code libraries that don't want to depend on an UI library.

So, in order to pass rich progress information, we need to use only BCL types and collections. Unfortunately, `IProgress<T>` does not define a standard....   but in general I guess everybody will expect (int Percent, string Text, string Description)

So, I would propose adding these interfaces:

```c#
IProgress<float> // by far, the implementation I've found most occurences searching on github.
IProgress< KeyValuePair<string,object> > // where key is the name of the property to set (percent, text, desc)

Кроме того, текущие IProgress<INT> и IProgress<STRING> могут кэшировать содержимое, поэтому они не исключают друг друга; текущий код уже кэширует прогресс, но он должен делать то же самое с текстом. Таким образом, фоновая задача может вызывать эти интерфейсы последовательно без потери значения, установленного предыдущим вызовом для другого свойства.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги