Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement IProgress<T> in ProgressDialog #58

Open
augustoproiete opened this issue Sep 6, 2021 · 0 comments
Open

Implement IProgress<T> in ProgressDialog #58

augustoproiete opened this issue Sep 6, 2021 · 0 comments
Labels
enhancement New feature or request hacktoberfest https://hacktoberfest.digitalocean.com help wanted Extra attention is needed up-for-grabs
Milestone

Comments

@augustoproiete
Copy link
Member

Discussed in #12 (comment)

Originally posted by vpenades November 25, 2020
The use case most of the times is going to be background tasks initialized with an Object value that can be cast to multiple versions of IProgress<T> so they can report back the progress of the backgrond task.

I think the interface is not widely used because it's not very well known, but since IProgress<T> exists from quite some time, I did a small search to see how people is using it, and I found:

IProgress<float>  // progress reported in values between 0-1
IProgress<int> // progress reported in values between 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:

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)

Additionally, the current IProgress<int> and IProgress<string> could cache the content so they're not mutually exclusive; the current code already caches the progress, but it should do the same with the text. So a background task could call these interfaces consecutively without loosing the value set by the previous call on the other property.

@augustoproiete augustoproiete added the enhancement New feature or request label Sep 6, 2021
@augustoproiete augustoproiete added this to the Future milestone Sep 6, 2021
@augustoproiete augustoproiete added help wanted Extra attention is needed up-for-grabs labels Sep 7, 2021
@augustoproiete augustoproiete added the hacktoberfest https://hacktoberfest.digitalocean.com label Oct 2, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request hacktoberfest https://hacktoberfest.digitalocean.com help wanted Extra attention is needed up-for-grabs
Development

No branches or pull requests

1 participant