/// <summary>
        /// 指定远程地址和本地文件绝对路径将文件传输到远程计算机
        /// </summary>
        /// <param name="filePath">本地文件的绝对路径</param>
        /// <param name="url">远程地址</param>
        /// <param name="listener">本次上传任务的监听器</param>
        /// <returns>返回0表示任务启动成功</returns>
        public int Upload(String filePath, String url, FileTransferListener listener)
        {
            int id = m_maxID++;

            m_runningWork.Add(id, filePath);
            m_listeners.Add(id, listener);
            Thread thread = new Thread(new ParameterizedThreadStart(MultithreadUploadWork));

            thread.Name = "" + id;
            object[] obj = { id, url };
            thread.Start(obj);
            return(0);
        }
        /// <summary>
        /// 多线程文件上传方法
        /// </summary>
        /// <param name="param">呼叫方法的参数,其实际值为{任务id,上传url}</param>
        public void MultithreadUploadWork(object param)
        {
            object[]             obj      = (object[])param;
            int                  id       = (int)obj[0];
            String               url      = (String)obj[1];
            String               filePath = m_runningWork[id];
            FileTransferListener listener = m_listeners[id];
            HttpWebRequest       request  = null;
            Stream               reader   = null;
            HttpWebResponse      response = null;
            FileStream           fs       = null;

            try
            {
                fs                  = new FileStream(filePath, FileMode.Open);
                request             = (HttpWebRequest)WebRequest.Create(url);
                request.Method      = "POST";
                request.ContentType = "application/octet-stream";
                byte[] buffer        = new byte[10240];
                long   currentLength = 0;
                long   totalLength   = fs.Length;
                request.ContentLength = totalLength;
                Stream writer = request.GetRequestStream();
                while (true)
                {
                    int len = fs.Read(buffer, 0, 10240);
                    writer.Write(buffer, 0, len);
                    if (listener != null)
                    {
                        listener.OnFileTransfer(id, totalLength, currentLength, 0, null);
                    }
                    currentLength += len;
                    if (len <= 0)
                    {
                        break;
                    }
                }
                writer.Close();
                response = (HttpWebResponse)request.GetResponse();
                reader   = response.GetResponseStream();
                long   contentLength = response.ContentLength;
                byte[] recvDatas     = new byte[contentLength];
                reader.Read(recvDatas, 0, (int)contentLength);
                if (listener != null)
                {
                    listener.OnFileTransfer(id, totalLength, currentLength, 0, null);
                }
            }
            catch (Exception ex)
            {
                if (listener != null)
                {
                    listener.OnFileTransfer(id, 0, 0, 3, ex.Message);
                }
            }
            finally
            {
                if (fs != null)
                {
                    fs.Dispose();
                }
                if (response != null)
                {
                    response.Close();
                }
                if (reader != null)
                {
                    reader.Close();
                }
            }
        }