protected internal void ReportProgress(BitsProgress progress) { var ev = OnProgress; if (ev != null) { ev(progress); } }
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); }