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); }
/// <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); } }
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(); } }
/// <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); } } }
/// <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); } }
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(); }
/// <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); }
/// <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); } }
void db_Progress(object sender, DataProgressEventArgs e) { this.ToOutput(string.Format("{0} of {1}: {2}", e.CurrentRow + 1, e.RowCount, e.Message)); }
public virtual void OnRequestDataSendProgressChanged(HttpContext sender, DataProgressEventArgs e) { RequestDataSendProgressChanged?.Invoke(sender, e); }
public virtual void OnResponseReadProgressChanged(HttpContext sender, DataProgressEventArgs e) { ResponseReadProgressChanged?.Invoke(sender, e); }