Ejemplo n.º 1
0
        private void ProgressTimer_Callback(object state)
        {
            long workID = (long)state;
            DownloadProgressArgs args;

            // 获取下载状态
            lock (this._syncRoot)
            {
                if (workID != this._workID)
                {
                    return;                        // 这次下载已经过期
                }
                var segments = this._writer.GetSegments();
                args = new DownloadProgressArgs(segments);
                var now = DateTime.Now;
                args.Speed = (args.DownloadedSize - this._lastDownloadedSize) / Math.Max(1, (long)(now - this._lastProgressChangeTime).TotalSeconds);
                this._lastProgressChangeTime = now;
                this._lastDownloadedSize     = args.DownloadedSize;
            }// lock

            // 触发进度改变事件
            this.OnProgressChanged(args);

            // 启动下一次进度计时
            lock (this._syncRoot)
            {
                if (workID != this._workID)
                {
                    return;                        // 这次下载已经过期
                }
                this._progressTimer.Change(ProgressTimerInterval, Timeout.Infinite);
            }
        }
Ejemplo n.º 2
0
        private void OnProgressChanged(DownloadProgressArgs e)
        {
            EventHandler <DownloadProgressArgs> handler = this.ProgressChanged;

            if (handler != null)
            {
                handler(this, e);
            }
        }