如何从C#中的特定点启动线程?

时间:2017-03-28 07:50:30

标签: c# ftp-client

此代码的作用是,它列出并从FTP服务器下载文件。

代码适用于单线程。下载文件的逻辑在" balance_load()" &安培;它根据算法下载文件,即负载分配

我正在使用ftpClient.DownloadFileAsync()

我想只为特定任务实现多线程。即不是整个功能,而是在for循环中。 但是这段代码同时执行了2次整个函数。文件下载两次。

Thread workerThread = new Thread(new ThreadStart(btnrepeat));
workerThread.Start();

Thread workerThread2 = new Thread(new ThreadStart(btnrepeat));
workerThread2.Start();

protected void btnrepeat()
{
    FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://192.168.0.117/");
    ftpRequest.Credentials = new NetworkCredential("win10", "zzzz");
    ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
    FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
    StreamReader streamReader = new StreamReader(response.GetResponseStream());
    List<string> directories = new List<string>();

    string line = streamReader.ReadLine();
    while (!string.IsNullOrEmpty(line))
    {
        directories.Add(line);
        line = streamReader.ReadLine();
    }
    streamReader.Close();

    using (WebClient ftpClient = new WebClient())
    {
        ftpClient.Credentials = new System.Net.NetworkCredential("win10", "zzzz");
        for (int i = 0; i <= directories.Count - 1; i++)
        {
            if (directories[i].Contains("."))
            {
                string path = "ftp://192.168.0.117/" + directories[i].ToString();
                string trnsfrpth = @"E:\\ProjectLocalPath\" + directories[i].ToString();
                extension = System.IO.Path.GetExtension(directories[i]);
                FtpWebRequest ftpRequest2 = (FtpWebRequest)WebRequest.Create(path);
                ftpRequest2.Credentials = new NetworkCredential("win10", "zzzz");
                ftpRequest2.Method = WebRequestMethods.Ftp.GetFileSize;
                FtpWebResponse response2 = (FtpWebResponse)ftpRequest2.GetResponse();
                filesize = (response2.ContentLength) / 1048576;

                balance_load(directories[i],trnsfrpth);
                Thread.Sleep(800);
            }
        }
        Timer1.Enabled = false;
        /* workerThread.Abort();
        workerThread2.Abort();
        workerThread3.Abort();*/
    }
}

0 个答案:

没有答案