Для первой части вашего вопроса взгляните на эту Joel On Software Forum Thread . Он не имеет отношения к .Net, а напрямую связан с передачей файла по протоколу TCP.
Что касается второй части, так как у меня нет вашего полного кода, поэтому я не могу понять, почему ваш stopWatch.ElapsedMilliseconds
равен нулю. Я думаю, что не было данных для передачи. Вы можете попробовать сделать что-то подобное, чтобы избежать ошибки деления на ноль.
if (stopWatch.ElapsedMilliseconds != 0)
Program.mainForm.AppendLabel(((fileSize * 8) / stopWatch.ElapsedMilliseconds).ToString());
Хотя у меня, вероятно, был бы 1-секундный таймер, и я сделал бы sum
переменной области видимости и обновлял бы вашу метку каждую секунду, т.е.:
public partial class Form1 : Form
{
int sum = 0;
int seconds = 0;
...
private void timer1_Tick(object sender, EventArgs e)
{
seconds += 1;
Program.mainForm.AppendLabel(((sum * 8) / seconds).ToString());
}
и сбросьте их, когда закончите перевод.
....
finally
{
timer1.Stop();
sum = 0;
seconds = 0
Console.WriteLine("sent");
CloseClient();
}