2014-04-04 99 views
-1

我有这段代码可以从ftp下载,并希望将其放入背景工作。FTP下载后台工作人员

void BtnDownloadClick(object sender, EventArgs e) 
{ 
    FolderBrowserDialog fldDlg = new FolderBrowserDialog(); 
    if (fldDlg.ShowDialog() == DialogResult.OK) 
      Download(fldDlg.SelectedPath, lstFiles.SelectedItem.ToString());  
} 

private void Download(string filePath, string fileName) 
     { 
      FtpWebRequest reqFTP; 
      try 
      { 
       FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create); 

       reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + PathFolders + "/" + fileName)); 
       reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; 
       reqFTP.UseBinary = true; 
       reqFTP.Credentials = new NetworkCredential(Username, Password); 
       FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 
       Stream ftpStream = response.GetResponseStream(); 
       long cl = response.ContentLength; 
       int bufferSize = 2048; 
       int readCount; 
       byte[] buffer = new byte[bufferSize]; 

       readCount = ftpStream.Read(buffer, 0, bufferSize); 
       while (readCount > 0) 
       { 
        outputStream.Write(buffer, 0, readCount); 
        readCount = ftpStream.Read(buffer, 0, bufferSize); 
       } 

       ftpStream.Close(); 
       outputStream.Close(); 
       response.Close(); 
      }  
} 

你能帮帮我吗?我是新来的C#...

谢谢你提前!

+1

欢迎使用[免费,全天候编码服务](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。 –

回答

0

最简单的方法是使用:

Task.Factory.StartNew(() => Download(fldDlg.SelectedPath, lstFiles.SelectedItem.ToString()); 

这将使用台异步任务来完成下载。由于您的用户界面不依赖于下载内的任何代码,这将工作正常。如果您的下载过程需要在完成时集成到您的用户界面中,那么最好使用BackgroundWorker。不过,在这种情况下,我认为你使用任务很好。