2014-04-04 92 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。不過,在這種情況下,我認爲你使用任務很好。