C# 螺纹';s的响应时间非常长(不常见)
我想用windows窗体应用程序中的线程在C#中下载一个文件,线程一开始工作正常(持续5秒),但突然停止工作,有时10秒左右没有响应,然后返回一秒,然后没有响应 我正在使用一个类来下载文件 代码如下:C# 螺纹';s的响应时间非常长(不常见),c#,multithreading,C#,Multithreading,我想用windows窗体应用程序中的线程在C#中下载一个文件,线程一开始工作正常(持续5秒),但突然停止工作,有时10秒左右没有响应,然后返回一秒,然后没有响应 我正在使用一个类来下载文件 代码如下: class DownloadFile { #region Fields static Double totalsize; Double received; int PartNum; long start, end; string savepat
class DownloadFile
{
#region Fields
static Double totalsize;
Double received;
int PartNum;
long start, end;
string savepath;
HttpWebRequest request;
Stream stream;
#endregion
#region Constructors
public DownloadFile() { totalsize = 1; received = 0; }
public DownloadFile(long s, long e, string PATH, HttpWebRequest REQUEST, int Partnumber)
{
totalsize = 1;
PartNum = Partnumber;
received = 0;
start = s;
request = REQUEST;
end = e;
savepath = PATH;
}
#endregion
#region Methods
public void DownLoad()
{
int bytesRead = 0;
byte[] buffer = new byte[1024];
FileStream fstr = new FileStream(savepath + "Part_" + PartNum + Path.GetExtension(Request.RequestUri.ToString()), FileMode.Create, FileAccess.Write);
HttpWebResponse response;
this.request.AddRange(start, end);
response = (HttpWebResponse)this.Request.GetResponse();
stream = response.GetResponseStream();
totalsize = this.end;
bytesRead = stream.Read(buffer, 0, buffer.Length);
while (bytesRead > 0)
{
received += bytesRead;
fstr.Write(buffer, 0, bytesRead);
bytesRead = stream.Read(buffer, 0, buffer.Length);
}
fstr.Close();
stream.Close();
}
public void AppendFiles()
{
}
#endregion
#region properties
public long End
{
get { return end; }
set { end = value; }
}
public long Start
{
get { return start; }
set { start = value; }
}
public Double Received
{
get { return received; }
}
public Double Totalsize
{
get { return totalsize; }
}
public HttpWebRequest Request
{
get { return request; }
set { request = value; }
}
public string SavePath
{
get { return savepath; }
set { savepath = value; }
}
#endregion
}
这里是线程开始的地方:
Class Program{
List<DownloadFile> DownLoadList = new List<DownloadFile>();
public void DownloadMethod()
{
for (int i = 0; i < DownLoadList.Count; i++)
{
new Thread(new ThreadStart(DownLoadList.ElementAt(i).DownLoad)).Start();
}
}
}
类程序{
列表下载列表=新列表();
公共void下载方法()
{
for(int i=0;i
我还有一个计时器,可以更新下载表单(progressBar和标签)Hmm,你很难看出线程不“响应”和服务器不发送数据之间的区别。后者的可能性更大。为什么
totalsize
是一个静态变量?使其成为静态意味着它将在DownloadFile的所有实例之间共享。根据给出的代码示例,这看起来很危险。不需要每个线程都有totalsize变量。我正在下载一个文件,只有一个文件Content=totalsize