Example #1
0
        void ReadFileAsync()
        {
            _fs.BeginRead(_buffer, 0, _buffer.Length, _ =>
            {
                try
                {
                    var count = _fs.EndRead(_);
                    var ee    = new DataProgressEventArgs(_fs.Length, _fs.Position);
                    var op    = Context.Operation;

                    if (op == null)
                    {
                        OnProgressChanged(ee);
                    }
                    else
                    {
                        op.Post(__ => OnProgressChanged(ee), null);
                    }
                    if (count == 0)
                    {
                        _fs.Close();
                        WriteFooterAsync();
                    }
                    else
                    {
                        AsyncData.AsyncStreamWrite(_buffer, 0, count, true, __ => ReadFileAsync());
                    }
                }
                catch (Exception ex)
                {
                    AsyncData.Exception = ex;
                    AsyncData.NotifyAsyncComplete();
                }
            }, null);
        }
Example #2
0
        /// <summary>
        /// 复制流
        /// </summary>
        /// <param name="src"></param>
        /// <param name="dest"></param>
        /// <param name="length"></param>
        protected virtual void CopyStream(System.IO.Stream src, System.IO.Stream dest, long length = 0)
        {
            var buffer = new byte[0x400 * 4];
            var count  = 0;
            var pos    = 0L;

            if (src.CanSeek)
            {
                src.Seek(0L, SeekOrigin.Begin);
            }
            if (length == 0)
            {
                if (!src.CanSeek)
                {
                    throw new InvalidOperationException("不支持检索长度的流,请设置长度参数");
                }
                else
                {
                    length = src.Length;
                }
            }

            var ee = new DataProgressEventArgs(length, 0L);

            Context.Operation.Post(_ => OnProgressChanged(ee), null);

            while ((count = src.Read(buffer, 0, buffer.Length)) > 0)
            {
                dest.Write(buffer, 0, count);
                pos += count;
                ee   = new DataProgressEventArgs(length, pos);
                Context.Operation.Post(_ => OnProgressChanged(ee), null);
            }
        }
Example #3
0
        protected virtual void WriteBodyAsync()
        {
            var op = Context.Operation;

            //一个文件失败,则把整个过程看作失败
            try
            {
                _fs     = FileInfo.OpenRead();
                _buffer = new byte[AsyncData.HttpContext.Client.Setting.WriteBufferSize];
                var ee = new DataProgressEventArgs(_fs.Length, 0L);
                if (op == null)
                {
                    OnProgressChanged(ee);
                }
                else
                {
                    op.Post(__ => OnProgressChanged(ee), null);
                }
                ReadFileAsync();
            }
            catch (Exception ex)
            {
                AsyncData.Exception = ex;
                AsyncData.NotifyAsyncComplete();
            }
        }
Example #4
0
        /// <summary>
        /// 写入数据区
        /// </summary>
        /// <param name="stream"></param>
        protected override void WriteBody(System.IO.Stream stream)
        {
            var length = Stream.Length;

            var ee     = new DataProgressEventArgs(length, 0L);
            var buffer = new byte[4 * 400];
            int count;
            var op = Context.Operation;

            if (op == null)
            {
                OnProgressChanged(ee);
            }
            else
            {
                op.Post(_ => OnProgressChanged(ee), null);
            }

            while ((count = Stream.Read(buffer, 0, buffer.Length)) > 0)
            {
                stream.Write(buffer, 0, count);
                ee = new DataProgressEventArgs(length, Stream.Position);
                if (op == null)
                {
                    OnProgressChanged(ee);
                }
                else
                {
                    op.Post(_ => OnProgressChanged(ee), null);
                }
            }
        }
Example #5
0
        /// <summary>
        /// 引发 <see cref="ProgressChanged" /> 事件
        /// </summary>
        /// <param name="ea">包含此事件的参数</param>
        protected virtual void OnProgressChanged(DataProgressEventArgs ea)
        {
            var handler = ProgressChanged;

            if (handler != null)
            {
                handler(this, ea);
            }
        }
        /// <summary>
        /// 引发 <see cref="ProgressChanged" /> 事件
        /// </summary>
        /// <param name="ea">包含此事件的参数</param>
        protected virtual void OnProgressChanged(DataProgressEventArgs ea = null)
        {
            if (ea == null)
            {
                ea = new DataProgressEventArgs(_streamLength, _position);
            }

            var handler = ProgressChanged;

            if (handler != null)
            {
                handler(this, ea);
            }
        }
Example #7
0
        protected override void WriteBodyAsync()
        {
            _buffer = new byte[0x400 * 4];
            var ee = new DataProgressEventArgs(Stream.Length, 0L);
            var op = Context.Operation;

            if (op == null)
            {
                OnProgressChanged(ee);
            }
            else
            {
                op.Post(_ => OnProgressChanged(ee), null);
            }
            ReadStreamAsync();
        }
Example #8
0
        /// <summary>
        /// 写入数据区
        /// </summary>
        /// <param name="stream"></param>
        protected virtual void WriteBody(System.IO.Stream stream)
        {
            using (var fs = FileInfo.OpenRead())
            {
                var buffer = new byte[0x400 * 4];
                var count  = 0;
                var pos    = 0L;
                var length = fs.Length;
                var op     = Context.Operation;

                var ee = new DataProgressEventArgs(length, 0L);
                if (op == null)
                {
                    OnProgressChanged(ee);
                }
                else
                {
                    op.Post(_ => OnProgressChanged(ee), null);
                }

                while ((count = fs.Read(buffer, 0, buffer.Length)) > 0)
                {
                    stream.Write(buffer, 0, count);
                    pos += count;
                    ee   = new DataProgressEventArgs(length, pos);

                    if (op == null)
                    {
                        OnProgressChanged(ee);
                    }
                    else
                    {
                        op.Post(_ => OnProgressChanged(ee), null);
                    }
                }
                fs.Close();
            }
        }
 /// <summary>
 /// 引发 <see cref="ProgressChanged" /> 事件
 /// </summary>
 /// <param name="ea">包含此事件的参数</param>
 protected virtual void OnProgressChanged(DataProgressEventArgs ea)
 {
     var handler = ProgressChanged;
     if (handler != null)
         handler(this, ea);
 }
Example #10
0
        /// <summary>
        /// 复制流
        /// </summary>
        /// <param name="src"></param>
        /// <param name="dest"></param>
        /// <param name="length"></param>
        protected virtual void CopyStream(System.IO.Stream src, System.IO.Stream dest, long length = 0)
        {
            var buffer = new byte[0x400 * 4];
            var count = 0;
            var pos = 0L;

            if (src.CanSeek) src.Seek(0L, SeekOrigin.Begin);
            if (length == 0)
            {
                if (!src.CanSeek) throw new InvalidOperationException("不支持检索长度的流,请设置长度参数");
                else length = src.Length;
            }

            var ee = new DataProgressEventArgs(length, 0L);
            Context.Operation.Post(_ => OnProgressChanged(ee), null);

            while ((count = src.Read(buffer, 0, buffer.Length)) > 0)
            {
                dest.Write(buffer, 0, count);
                pos += count;
                ee = new DataProgressEventArgs(length, pos);
                Context.Operation.Post(_ => OnProgressChanged(ee), null);
            }
        }
Example #11
0
 void db_Progress(object sender, DataProgressEventArgs e)
 {
     this.ToOutput(string.Format("{0} of {1}: {2}", e.CurrentRow + 1, e.RowCount, e.Message));
 }
Example #12
0
 public virtual void OnRequestDataSendProgressChanged(HttpContext sender, DataProgressEventArgs e)
 {
     RequestDataSendProgressChanged?.Invoke(sender, e);
 }
Example #13
0
 public virtual void OnResponseReadProgressChanged(HttpContext sender, DataProgressEventArgs e)
 {
     ResponseReadProgressChanged?.Invoke(sender, e);
 }