Ookii-dialogs-wpf: ProgressDialog deve implementar Progress<t/>

Criado em 25 mar. 2020  ·  4Comentários  ·  Fonte: ookii-dialogs/ookii-dialogs-wpf

poderia ser muito útil se ProgressDialog implementasse estas interfaces:

System.IProgress<int> para relatar a porcentagem de progresso
System.IProgress<Text> para relatar o progresso textual

Assim, o objeto ProgressDialog pode ser passado como um objeto simples para os trabalhos em execução e lançado em IProgress<int> e IProgress<Text> para relatórios de progresso

enhancement help wanted

Todos 4 comentários

Obrigado @vpenades , parece uma ótima ideia.

Deixe-me saber se você gostaria de tentar e enviar um PR, caso contrário, eu irei fazer isso em breve no próximo lançamento.

PR pronto ...

@vpenades Ookii.Dialogs.Wpf agora suporta .NET 5, bem como .NET Core 3.1, então pensei em enviar um ping caso você queira começar a discutir possíveis melhorias para a implementação de IProgress<T>

ps: Não se sinta obrigado a responder. Este é apenas um ping amigável, dado o seu interesse anterior nisso.

O caso de uso na maioria das vezes serão tarefas em segundo plano inicializadas com um valor Object que pode ser convertido em várias versões de IProgress<T> para que possam relatar o progresso da tarefa em segundo plano.

Acho que a interface não é muito usada porque não é muito conhecida, mas como IProgress<T> existe há muito tempo, fiz uma pequena pesquisa para ver como as pessoas a estão usando e descobri:

`` `C #
IProgress// progresso relatado em valores entre 0-1
IProgress// progresso relatado em valores entre 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)

Além disso, os atuais IProgress<INT> e IProgress<STRING> podem armazenar em cache o conteúdo de forma que não sejam mutuamente exclusivos; o código atual já armazena o progresso em cache, mas deve fazer o mesmo com o texto. Portanto, uma tarefa em segundo plano poderia chamar essas interfaces consecutivamente sem perder o valor definido pela chamada anterior na outra propriedade.

Esta página foi útil?
0 / 5 - 0 avaliações