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();
}