Пример #1
0
 /// <summary>
 ///     ProgressReporter (Thread safe progress reporter)
 /// </summary>
 /// <param name="completionState">Associated state object which implements ICompletionState</param>
 /// <param name="defaultRequestKey">Optional IRequestKey object which can be attached to the progress object</param>
 /// <param name="setTotalCallback">Optional callback executed after setting value of the Total property</param>
 /// <param name="reportProgressCallback">Optional callback executed after setting value of the Total property</param>
 public ProgressReporter(ICompletionState completionState, IRequestKey defaultRequestKey,
                         Action <IProgress> setTotalCallback = null, Action <IProgress> reportProgressCallback = null)
 {
     LinkTo(completionState);
     DefaultRequestKey      = defaultRequestKey;
     SetTotalCallback       = setTotalCallback;
     ReportProgressCallback = reportProgressCallback;
 }
Пример #2
0
        public TProgress CreateProgress(IRequestKey requestKey, Action <TProgress> extraActionOnProgressObject,
                                        object data = null)
        {
            if (CompletionState == null)
            {
                return(null);
            }

            var progress = CompletionState as TProgress ?? new TProgress()
                           .LinkTo(requestKey ?? DefaultRequestKey)
                           .WithUpdate(CompletionState.ProgressCompleted, CompletionState.ProgressTotal)
                           .WithMessage(CompletionState.ProgressMessage);

            extraActionOnProgressObject?.Invoke(progress);

            return(progress);
        }
Пример #3
0
        public virtual void Report(decimal increment, Action <TProgress> extraActionOnProgressObject,
                                   string message         = null, object data = null,
                                   IRequestKey requestKey = null)
        {
            CheckCompletionStateAvailability();

            Monitor.Enter(ProgressReportingLock);
            try
            {
                CompletionState.ProgressCompleted += increment;
                CompletionState.ProgressMessage    = message;
                ReportProgressCallback?.Invoke(CreateProgress(requestKey, extraActionOnProgressObject, data));
            }
            finally
            {
                Monitor.Exit(ProgressReportingLock);
            }
        }
Пример #4
0
 public NsbProgressReporter(ISendOnlyBus bus, ICompletionState completionState,
                            IRequestKey defaultRequestKey, Action <IProgress> setTotalCallback = null,
                            Action <IProgress> reportProgressCallback = null)
     : base(completionState, defaultRequestKey, x =>
 {
     setTotalCallback?.Invoke(x);
     using (new TransactionScope(TransactionScopeOption.Suppress))
     {
         bus.Publish(x);
     }
 }, x =>
 {
     reportProgressCallback?.Invoke(x);
     using (new TransactionScope(TransactionScopeOption.Suppress))
     {
         bus.Publish(x);
     }
 })
 {
 }
Пример #5
0
        public void EnforceCompletion(Action <TProgress> extraActionOnProgressObject, string message = null,
                                      object data = null, IRequestKey requestKey = null)
        {
            CheckCompletionStateAvailability();

            Monitor.Enter(ProgressReportingLock);
            try
            {
                if (CompletionState.ProgressCompleted == CompletionState.ProgressTotal)
                {
                    return;
                }

                CompletionState.ProgressCompleted = CompletionState.ProgressTotal;
                CompletionState.ProgressMessage   = message;

                ReportProgressCallback?.Invoke(CreateProgress(requestKey, extraActionOnProgressObject, data));
            }
            finally
            {
                Monitor.Exit(ProgressReportingLock);
            }
        }
Пример #6
0
 public void Report(object data, Action <TProgress> extraActionOnProgressObject, string message = null,
                    IRequestKey requestKey = null)
 {
     Report(0, extraActionOnProgressObject, message, data, requestKey);
 }