Exemple #1
0
 public void Dispose()
 {
     Stop();
     if (--fdlCount == 0)
     {
         EventMgr.single.RemoveListener("DownFileEvent", DownLoadCallBack);
     }
     _onDownload = null;
 }
Exemple #2
0
        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);
            }
        }