public void Dispose() { Stop(); if (--fdlCount == 0) { EventMgr.single.RemoveListener("DownFileEvent", DownLoadCallBack); } _onDownload = null; }
public void Start(OnDownLoad callback, Action action = Action.DownFile) { try { if (_state == State.Doing) { throw(new Exception("last request not over")); } _onDownload = callback; _state = State.Doing; _action = action; _cancel = false; _request = HttpWebRequest.Create(new Uri(_url)) as HttpWebRequest; _request.KeepAlive = false; //_request.Timeout=TimeOut;//Timeout,ReadWriteTimeout对于异步请求无效,需自己实现超时 //_request.ReadWriteTimeout=TimeOut; _timeout = new System.Timers.Timer(1000); _timeout.Elapsed += new ElapsedEventHandler(TimeOutCallBack); _timeout.Enabled = true; switch (_action) { case Action.DownFile: _file = new FileStream(_path, FileMode.OpenOrCreate, FileAccess.Write); if (_file.Length > 0) { _file.Position = _file.Length - 1; //range设置到文件尾请求会返回错误 } _request.AddRange("bytes", (int)_file.Position); if (_buf == null) { _buf = new byte[RecvBuffSize]; } break; case Action.CalcSize: _size = 0; _dsize = 0; break; } _request.BeginGetResponse(new AsyncCallback(ResponseCallback), this); OnProgress(this); } catch (Exception e) { Log.e(e, Log.Tag.Default, e.StackTrace); OnDownFailed(this); } }