Пример #1
0
        public void Progress(int len)
        {
            if (isCompleted)
            {
                return;
            }

            if (TransferredLength == 0 && !isStarted)
            {
                isStarted = true;
                Started?.Invoke(this);
            }

            TransferredLength += len;
            Progressed?.Invoke(this, len);

            if (TransferredLength == Length)
            {
                isCompleted = true;
                Completed?.Invoke(this);
            }

//            else if (TransferredLength > Length)
//            {
//#if DEBUG
//                Env.Instance.ShowMessage("TransferredLength=" + TransferredLength + "> Length" + Length);
//#endif
//            }
        }
Пример #2
0
        void IProgressable.Progress(int len)
        {
            //传送文件的时候,如果文件的状态已经变成了Confirm或者Completed, 再调用Progress是不对的。
            if (IsTransferEnd())
            {
                return;
            }
            //即使len == 0, 只要用户有意调用这个函数,还是要更改TransferState,这对于空文件是有意义的。会在下面直接把文件变成Completed状态。
            if (TransferredLength == 0)
            {
                TransferState = TransferState.Transferring;
            }

            TransferredLength += len;
            Progressed?.Invoke(this, len);

            if (TransferredLength >= Length)
            {
                TransferState = TransferState.Completed;
                if (TransferredLength > Length)
                {
                    var msg = "Transfered Lenght > Total Length. some time this does happens, and the transfer is success.";
                    Env.Logger.Log(msg);
                }
            }

            ((IProgressable)TopLevelDir)?.Progress(len);
            TransferBundle?.Progress(len);
        }
Пример #3
0
 protected void OnProgress()
 {
     if (control.InvokeRequired)
     {
         control.Invoke(new VoidDelegate(OnProgress));
         return;
     }
     if (Progressed != null)
     {
         Progressed.Invoke(this, EventArgs.Empty);
     }
 }
Пример #4
0
        /// <summary>
        /// Updated the component with the latest upload progress.
        /// </summary>
        /// <param name="fileEntry">Currently processed file entry.</param>
        /// <param name="progressProgress">Progress value.</param>
        /// <returns>A task that represents the asynchronous operation.</returns>
        internal async Task UpdateFileProgressAsync(IFileEntry fileEntry, long progressProgress)
        {
            ProgressProgress += progressProgress;

            var progress = Math.Round((double)ProgressProgress / ProgressTotal, 3);

            if (Math.Abs(progress - Progress) > double.Epsilon)
            {
                Progress = progress;

                await Progressed.InvokeAsync(new FileProgressedEventArgs( fileEntry, Progress ));
            }
        }
Пример #5
0
 void addOnProgress(Progressed value)
 {
     lock (_lock) {
         if (progress < 1f)
         {
             _onProgressed += value;
         }
         else
         {
             value(progress);
         }
     }
 }
 public void Report(RunDetail <MulticlassClassificationMetrics> value)
 {
     Progressed?.Invoke(this, new ProgressEventArgs
     {
         Model = new AutomationExperiment
         {
             Trainer          = value.TrainerName,
             LogLoss          = value.ValidationMetrics?.LogLoss,
             LogLossReduction = value.ValidationMetrics?.LogLossReduction,
             MicroAccuracy    = value.ValidationMetrics?.MicroAccuracy,
             MacroAccuracy    = value.ValidationMetrics?.MacroAccuracy
         }
     });
 }
Пример #7
0
        public void Progress(int length)
        {
            if (TransferredLength == 0)
            {
                TransferState = TransferState.Transferring;
            }

            TransferredLength += length;
            Progressed?.Invoke(this, length);

            if (TransferredLength >= Length)
            {
                TransferState = TransferState.Completed;
            }
        }
Пример #8
0
        internal protected override void OnInitRequest()
        {
            //TODO 先检查哪些Items已经存在。直接更新其状态。
            receiver.SaveToPath = Path;
            receiver.PutItems(Items);

            GetItemsMessage message = new GetItemsMessage(Items);

            message.Path     = RemotePath;
            message.BrowseId = BrowseConversionId;
            PostMessage(message);

            Items.ForEach(i => receiver.Length += i.Length);

            receiver.Started    += o => Started?.Invoke(this);
            receiver.Completed  += o => Completed?.Invoke(this);
            receiver.Progressed += (o, v) => Progressed?.Invoke(this, v);
        }
Пример #9
0
        internal void ForceComplete(TransferState state)
        {
            //正常状况下,如果已经IsPostCompleted,就不会更新Length了。
            //异常情况是,当对方通知文件已经存在时,这边不管已经传输多少,直接把状态修改成Confirmed。此时界面上需要直接把进度更新成100%。
            var tmp = TransferredLength;

            TransferredLength = Length;

            var delta = Length - tmp;

            Progressed?.Invoke(this, delta);
            if (Parent != null)
            {
                ((IProgressable)Parent).Progress((int)delta);
            }

            //要放在最后,因为上面Progress会引起父状态变化,而这里会导致递归检查父状态。
            TransferState = state;
        }
Пример #10
0
        public DoNothingJob(string name)
        {
            Name          = name;
            randomFailer_ = new Random();
            Status        = JobStatus.Pending;
            var elapsedTime = new Random().Next(100, 1000);

            //Console.Write("Initializing job {0} that takes {1:##.0}s to complete.\n", Name, elapsedTime * 100.0 / 1000);
            timer_ = new Timer(elapsedTime)
            {
                AutoReset = true
            };
            timer_.Elapsed += (sender, eventargs) =>
            {
                var randomFailerValue = randomFailer_.Next(1, 300); // Fail 1 in 3.

                //Console.WriteLine($"job:{Name}, randomFailerValue={randomFailerValue}");
                var willFail = randomFailerValue == 1;
                if (willFail)
                {
                    timer_.Stop();
                    timer_.Close();
                    Status = JobStatus.Failed;
                }
                percentCounter_ += 1;
                if (percentCounter_ == 100)
                {
                    percentCounter_ = 0;
                    timer_.Stop();
                    timer_.Close();
                    Status = JobStatus.Completed;
                    Finished?.Invoke();
                }
                else
                {
                    Progressed?.Invoke(percentCounter_);
                }
            };
        }
Пример #11
0
        void IProgressable.Progress(int len)
        {
            //传送文件的时候,如果文件的状态已经变成了Confirm或者Completed, 再调用Progress是不对的。
            if (!ShouldProgress())
            {
                return;
            }



            if (TransferredLength == 0)
            {
                TransferState = TransferState.Transferring;
            }

            TransferredLength += len;
            Progressed?.Invoke(this, len);

            if (TransferredLength >= Length)
            {
                TransferState = TransferState.Completed;
                if (TransferredLength > Length)
                {
                    var msg = "Transfered Lenght > Total Length. some time this does happens, and the transfer is success.";
                    Env.Instance.Logger.Warn(msg);
                }
            }
            //对于DirItem是怎么避免错误的Progress的?FileItem会导致父容器Progress。

            //容器类的Progress被直接调用是错误的。应该定义一个ProgressableContainer。只有一个具体的Item才能驱动容器的进度。
            //现在FileItem的Parent还不一定是DirItem,可以是ListSequencable。应该简化此处的结构,让Parent只有一种可能性。应该考虑让DirItem直接实现ListSequencable。

            if (Parent != null)
            {
                ((IProgressable)Parent).Progress(len);
            }
        }
Пример #12
0
 private void request_Progress(long current, long total) => API.Schedule(() => Progressed?.Invoke(current, total));
Пример #13
0
 public void InvokeProgress(ProgressEventArgs e)
 {
     Progressed?.Invoke(this, e);
 }
Пример #14
0
 void IGameObjectiveInformer.OnProgressed(int amount)
 {
     Progressed?.Invoke(amount);
 }