мое приложение отправляет файл на сервер, используя (socket tcp c #)
передача файла работает отлично ... но форма выполнения, которая показывает мне, что процесс отправки не работает хорошо
его отстает и показывает как 45 МБ /затем 2 Мбит / с он постоянно идет вверх и вниз, и когда я пытаюсь переместить окно, оно немного отстает, как будто что-то не так в потоке ... я надеюсь, вы понимаете, что происходит ..
как это исправить?
Thread thS = new Thread(timeElasped);
thS.Start(); //this code runs when the form show up
приведенный ниже код выполняется потоком в форме выполнения
private void timeElasped()
{
int counter = 0;
while (fileTransfer.busy)
{
rate = (fileTransfer.sum - prevSum);
RateLabel(string.Format("{0}/Sec", CnvrtUnit(rate)));
if(rate!=0)
left = (fileTransfer.fileSize - fileTransfer.sum) / rate;
prevSum = fileTransfer.sum;
TimeSpan t = TimeSpan.FromSeconds(left);
timeLeftLabel(FormatRemainingText(rate, t));
TimeSpan Duration = TimeSpan.FromSeconds(counter);
ElapsedLabel(string.Format("{0:D2}:{1:D2}:{2:D2}", Duration.Hours, Duration.Minutes, Duration.Seconds));
counter++;
Thread.Sleep(1000);
}
}
это код отправки файла
public static void sendFile(string filePath)
{
//initialize a thread for progress form
Thread thFP = new Thread(fpRUN);
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
string fileName = Path.GetFileName(filePath);
byte[] fileData;
try
{
//sending file name and file size to the server
busy = true;
fileSize = fs.Length;
byte[] fileDetial = null;
string detail = fileName + "," + fileSize.ToString();
fileDetial = Encoding.ASCII.GetBytes(detail);
client.Send(fileDetial);
//sending file data to the server
fileData = new byte[packetSize];
count = 0;
sum = 0;
// running transfer rate
fileProgress fP = new fileProgress("Sending...");
//show the progress form
thFP.Start(fP);
while (sum < fileSize)
{
fP.ProgressBarFileHandler(sum, fileSize);
fs.Seek(sum, SeekOrigin.Begin);
fs.Read(fileData, 0, fileData.Length);
count = client.Send(fileData, 0, fileData.Length, SocketFlags.None);
sum += count;
}
}
finally
{
busy = false;
fs.Close();
fileData = null;
MessageBox.Show(string.Format("{0} sent successfully", fileName));
}
}