Как отобразить Кбит / с и общий размер файла во время загрузки файла с ftp с помощью приложения C# .NET windows?
Привет,
How to display kbps and total file size on label during file download from ftp using c# .net windows application?
но получаю ошибку:-
Cross-thread operation not valid: Control 'label1' accessed from a thread other than the thread it was created on.
в этой строке:-
labelProgress.Text = Convert.ToString(iProgress);
Пожалуйста, помогите мне.
заранее спасибо.
Анкит Агарвал
инженер-программист
Что я уже пробовал:
string[] files = ReadFileList();
FTPSettings.IP = " xxxx";
FTPSettings.Идентификатор пользователя = "ХХХХХ";
FTPSettings.Пароль = " xxxxx";
//FtpWebRequest reqFTP = null;
//FtpStream поток = нулевой;
foreach (строковый файл в файлах)
{
//string fileName = E. аргумент.Метод toString();
Запрос FtpWebRequest = (FtpWebRequest)WebRequest.Create ("ftp://" + FTPSettings.IP + " / " + файл);
запрос.Учетные данные = new NetworkCredential(FTPSettings.UserID, FTPSettings.Пароль);
запрос.Способ = WebRequestMethods.По FTP.GetFileSize;
запрос.Прокси = null;
long fileSize; / / это ключ для ReportProgress
using (WebResponse resp = request. GetResponse())
размер = респ.ContentLength;
request = (FtpWebRequest)WebRequest.Create ("ftp://" + FTPSettings.IP + " / " + файл);
запрос.Учетные данные = new NetworkCredential(FTPSettings.UserID, FTPSettings.Пароль);
запрос.Способ = WebRequestMethods.По FTP.Downloadfile следует;
using (FtpWebResponse responseFileDownload = (FtpWebResponse)request. GetResponse())
using (Stream responseStream = responseFileDownload.GetResponseStream())
using (FileStream writeStream = new FileStream (@"C:\abc\" + файл, файловый режим.Создавать))
{
int Length = 2048;
Byte [] buffer = новый байт[длина];
int bytesRead = responseStream. Read(буфер, 0, длина);
int байт = 0;
while (bytesRead > 0)
{
writeStream.Write(buffer, 0, bytesRead);
bytesRead = responseStream. Read(буфер, 0, длина);
bytes += bytesRead;/ / не забудьте увеличить bytesRead !
int iProgress = 0;
int totalSize = (int)(размер файла) / 1000; / / Кбайт
if (totalSize > 0)
{
iProgress = (байт / 1000) * 100 / totalSize;
}
labelProgress.Текст = Преобразовать.ToString(iProgress);
labelTotalSize.Текст = Преобразовать.ToString(totalSize);
backgroundWorker1. ReportProgress(iProgress, totalSize);
}
}