C# 螺纹';s的响应时间非常长(不常见)

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

我想用windows窗体应用程序中的线程在C#中下载一个文件,线程一开始工作正常(持续5秒),但突然停止工作,有时10秒左右没有响应,然后返回一秒,然后没有响应 我正在使用一个类来下载文件 代码如下:

 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