Пример #1
0
        protected internal void ReportProgress(BitsProgress progress)
        {
            var ev = OnProgress;

            if (ev != null)
            {
                ev(progress);
            }
        }
Пример #2
0
            private void OnTimerTick(object state)
            {
                var job    = (BitsTransfer.BitsJob)state;
                var status = job.State;

                BitsProgress progress = new BitsProgress();

                progress.Job = job;

                if (status == BG_JOB_STATE.BG_JOB_STATE_TRANSFERRED)
                {
                    progress.BytesTotal             = (long)job.BytesTotal;
                    progress.BytesTransferred       = (long)job.BytesTransferred;
                    progress.BytesRemaining         = progress.BytesTotal - progress.BytesTransferred;
                    progress.EstimatedSpeed         = 0;
                    progress.EstimatedTimeRemaining = -1;
                    progress.Percentage             = 1;
                    job.ReportProgress(progress);

                    return;
                }
                if (status != BG_JOB_STATE.BG_JOB_STATE_TRANSFERRING)
                {
                    lock (_bytesDeltaQueue)
                    {
                        _bytesDeltaQueue.Clear();
                    }
                }


                progress.BytesTotal       = (long)job.BytesTotal;
                progress.BytesTransferred = (long)job.BytesTransferred;
                progress.BytesRemaining   = progress.BytesTotal - progress.BytesTransferred;

                var totalSeconds = -1L;
                var lastBytes    = Interlocked.Exchange(ref _lastBytesTransferred, progress.BytesTransferred);
                var delta        = progress.BytesTransferred - lastBytes;

                if (delta > 0)
                {
                    this.BytesDelta = delta;
                }
                var avgDelta = this.BytesDelta;

                if (lastBytes >= 0 && avgDelta > 0)
                {
                    totalSeconds = progress.BytesRemaining / avgDelta;
                }

                progress.EstimatedSpeed         = avgDelta;
                progress.EstimatedTimeRemaining = totalSeconds;
                progress.Percentage             = progress.BytesTotal > 0
                    ? progress.BytesTransferred / (float)progress.BytesTotal
                    : 0;
                job.ReportProgress(progress);
            }