Ookii-dialogs-wpf: ProgressDialog sollte Progress implementieren<t/>

Erstellt am 25. März 2020  ·  4Kommentare  ·  Quelle: ookii-dialogs/ookii-dialogs-wpf

es könnte sehr nützlich sein, wenn ProgressDialog diese Schnittstellen implementieren würde:

System.IProgress<int> um den Fortschrittsprozentsatz zu melden
System.IProgress<Text> um den Textfortschritt zu melden

So könnte das ProgressDialog-Objekt als einfaches Objekt an die laufenden Jobs übergeben und zur Fortschrittsberichterstattung in IProgress<int> und IProgress<Text>

enhancement help wanted

Alle 4 Kommentare

Danke @vpenades , das klingt nach einer tollen Idee.

Lassen Sie es mich wissen, wenn Sie es ausprobieren möchten und senden Sie eine PR, sonst komme ich bald zum nächsten Release.

PR bereit...

@vpenades Ookii.Dialogs.Wpf unterstützt jetzt .NET 5 sowie .NET Core 3.1, also dachte ich, ich würde Sie anpingen, falls Sie jemals über mögliche Verbesserungen der IProgress<T> Implementierung diskutieren möchten

ps: Fühle dich nicht verpflichtet zu antworten. Dies ist nur ein freundlicher Ping, wenn Sie Ihr vorheriges Interesse daran haben.

Der Anwendungsfall sind meistens Hintergrundaufgaben, die mit einem Objektwert initialisiert werden, der in mehrere Versionen von IProgress<T> werden kann, damit sie den Fortschritt der Hintergrundaufgabe melden können.

Ich denke, die Schnittstelle wird nicht weit verbreitet, weil sie nicht sehr bekannt ist, aber da IProgress<T> seit einiger Zeit existiert, habe ich eine kleine Suche durchgeführt, um zu sehen, wie die Leute sie verwenden, und ich fand:

```C#
IFortschritt// Fortschritt wird in Werten zwischen 0-1 . gemeldet
IFortschritt// Fortschritt wird in Werten zwischen 0-100 . gemeldet


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)

Außerdem könnten die aktuellen IProgress<INT> und IProgress<STRING> den Inhalt zwischenspeichern, damit sie sich nicht gegenseitig ausschließen; Der aktuelle Code speichert den Fortschritt bereits im Cache, sollte jedoch mit dem Text dasselbe tun. So könnte eine Hintergrundaufgabe diese Schnittstellen nacheinander aufrufen, ohne den Wert zu verlieren, der durch den vorherigen Aufruf der anderen Eigenschaft festgelegt wurde.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen