BiliRanking.Core.TSDownload.ThreadDL C# (CSharp) 메소드

ThreadDL() 개인적인 메소드

下载专用线程的方法
private ThreadDL ( ) : void
리턴 void
        private void ThreadDL()
        {
            HttpWebRequest Myrq = (HttpWebRequest)HttpWebRequest.Create(URL);
            Myrq.Timeout = 5000;
            HttpWebResponse myrp = null;
            //bool f = false;
            int retry = 0;
            while (myrp == null)
            {
                try
                {
                    myrp = (HttpWebResponse)Myrq.GetResponse();
                }
                catch
                {
                    Log.Warn(FileName + "地址失败!等待延时" + URL);
                    retry++;
                    Thread.Sleep(3000); //TODO:同步的等待方法可能导致问题
                }
                if (retry == 5)
                {
                    Log.Error("我去," + FileName + "下载失败,待会单独再下这个!");
                    Myrq.Abort();
                    Percent = 100;
                    return;
                }
            }
            TotalBytes = myrp.ContentLength;
            SetPbM((int)TotalBytes >> 4);
            Stream st = myrp.GetResponseStream();
            st.ReadTimeout = 3000;

            //检测是否有重名,有则加入(1),如仍重复加(2),以此类推
            if (File.Exists(FileName))
            {
                string fn1 = FileName.Substring(0, FileName.LastIndexOf('.'));
                string fn2 = FileName.Substring(FileName.LastIndexOf('.'));
                int i = 0;
                string nFileName;
                do
                {
                    i++;
                    nFileName = string.Format("{0}({1}){2}", fn1, i, fn2);
                } while (File.Exists(nFileName));
                FileName = nFileName;
            }

            Stream so = new FileStream(FileName, FileMode.CreateNew);
            byte[] by = new byte[10240];
            int osize = st.Read(by, 0, (int)by.Length);
            while (osize > 0)
            {
                DownloadedBytes = osize + DownloadedBytes;
                so.Write(by, 0, osize);
                SetPbV((int)DownloadedBytes >> 4);
                try
                {
                    osize = st.Read(by, 0, (int)by.Length);
                }
                catch
                {
                    Log.Error("我去," + FileName + "下载失败,待会单独再下这个!");
                    so.Close();
                    st.Close();
                    Myrq.Abort();
                    Percent = 100;
                    return;
                }
                Percent = (float)DownloadedBytes / (float)TotalBytes * 100;
            }
            so.Close();
            st.Close();
            Myrq.Abort();
        }