Renamed ProgressUpdated event to ProgressChanged in order to conform with the status report naming convention; removed progress reporting from the Progression class; moved progress reporting into its own interface which is now optional to implement for any background task; renamed Progression to Waitable since it no longer has anything to do with progress; fixed unit tests
git-svn-id: file:///srv/devel/repo-conversion/nusu@64 d2e56fa2-650e-0410-a79f-9358c0239efd
This commit is contained in:
parent
1161ef8f25
commit
7dbfc3c422
15 changed files with 321 additions and 160 deletions
|
@ -28,7 +28,7 @@ namespace Nuclex.Support.Tracking {
|
|||
/// Type of the progression that is being observed
|
||||
/// </typeparam>
|
||||
internal class ObservedWeightedProgression<ProgressionType> : IDisposable
|
||||
where ProgressionType : Progression {
|
||||
where ProgressionType : Waitable {
|
||||
|
||||
/// <summary>Delegate for reporting progress updates</summary>
|
||||
public delegate void ReportDelegate();
|
||||
|
@ -69,8 +69,16 @@ namespace Nuclex.Support.Tracking {
|
|||
if(weightedProgression.Progression.Ended) {
|
||||
this.progress = 1.0f;
|
||||
} else {
|
||||
this.weightedProgression.Progression.AsyncProgressUpdated +=
|
||||
new EventHandler<ProgressUpdateEventArgs>(asyncProgressUpdated);
|
||||
this.progressReporter = this.weightedProgression.Progression as IProgressReporter;
|
||||
|
||||
if(this.progressReporter != null) {
|
||||
this.asyncProgressChangedEventHandler = new EventHandler<ProgressReportEventArgs>(
|
||||
asyncProgressChanged
|
||||
);
|
||||
|
||||
this.progressReporter.AsyncProgressChanged +=
|
||||
this.asyncProgressChangedEventHandler;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -119,7 +127,7 @@ namespace Nuclex.Support.Tracking {
|
|||
/// <summary>Called when the progress of the observed progression changes</summary>
|
||||
/// <param name="sender">Progression whose progress has changed</param>
|
||||
/// <param name="e">Contains the updated progress</param>
|
||||
private void asyncProgressUpdated(object sender, ProgressUpdateEventArgs e) {
|
||||
private void asyncProgressChanged(object sender, ProgressReportEventArgs e) {
|
||||
this.progress = e.Progress;
|
||||
this.progressUpdateCallback();
|
||||
}
|
||||
|
@ -138,8 +146,12 @@ namespace Nuclex.Support.Tracking {
|
|||
this.weightedProgression.Progression.AsyncEnded -=
|
||||
new EventHandler(asyncEnded);
|
||||
|
||||
this.weightedProgression.Progression.AsyncProgressUpdated -=
|
||||
new EventHandler<ProgressUpdateEventArgs>(asyncProgressUpdated);
|
||||
if(this.progressReporter != null) {
|
||||
this.progressReporter.AsyncProgressChanged -=
|
||||
this.asyncProgressChangedEventHandler;
|
||||
|
||||
this.asyncProgressChangedEventHandler = null;
|
||||
}
|
||||
|
||||
this.endedCallback = null;
|
||||
this.progressUpdateCallback = null;
|
||||
|
@ -150,6 +162,9 @@ namespace Nuclex.Support.Tracking {
|
|||
|
||||
}
|
||||
|
||||
private EventHandler<ProgressReportEventArgs> asyncProgressChangedEventHandler;
|
||||
/// <summary>The observed progression's progress reporting interface</summary>
|
||||
private IProgressReporter progressReporter;
|
||||
/// <summary>The weighted progression that is being observed</summary>
|
||||
private WeightedProgression<ProgressionType> weightedProgression;
|
||||
/// <summary>Callback to invoke when the progress updates</summary>
|
||||
|
|
|
@ -51,7 +51,7 @@ namespace Nuclex.Support.Tracking {
|
|||
TransformingReadOnlyCollection<
|
||||
ObservedWeightedProgression<ProgressionType>, WeightedProgression<ProgressionType>
|
||||
>
|
||||
where ProgressionType : Progression {
|
||||
where ProgressionType : Waitable {
|
||||
|
||||
/// <summary>Initializes a new weighted progression collection wrapper</summary>
|
||||
/// <param name="items">Items to be exposed as weighted progressions</param>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue