예제 #1
0
        public IProgressReporter CreateProgressReporter(CancellationToken cancellationToken = default(CancellationToken))
        {
            var progress = new ProgressCollector(Current.Dispatcher.SynchronizingObject, cancellationToken);

            AddProgress(progress);
            return(progress.ProgressReporter);
        }
예제 #2
0
 public ReporterImpl(ProgressCollector collector, ReporterImpl parent, double scaleFactor, CancellationToken cancellationToken)
 {
     _progressCollector = collector;
     _parentReporter    = parent;
     _scaleFactor       = scaleFactor;
     _cancellationToken = cancellationToken;
 }
예제 #3
0
 public void AddProgress(ProgressCollector progress)
 {
     if (progress == null)
     {
         throw new ArgumentNullException(nameof(progress));
     }
     Current.Dispatcher.VerifyAccess();
     if (currentProgress != null)
     {
         currentProgress.ProgressMonitorDisposed -= progress_ProgressMonitorDisposed;
         currentProgress.PropertyChanged         -= progress_PropertyChanged;
     }
     waitingProgresses.Push(currentProgress); // push even if currentProgress==null
     SetActiveProgress(progress);
 }
예제 #4
0
        private void SetActiveProgress(ProgressCollector progress)
        {
            Current.Dispatcher.VerifyAccess();
            currentProgress = progress;
            if (progress == null)
            {
                _statusBarView.HideProgress();
                return;
            }

            progress.ProgressMonitorDisposed += progress_ProgressMonitorDisposed;
            if (progress.ProgressMonitorIsDisposed)
            {
                progress_ProgressMonitorDisposed(progress, null);
                return;
            }
            progress.PropertyChanged += progress_PropertyChanged;
        }