//데이터의 전체 또는 일부 수신시 호출

            client.DownloadProgressChanged += (obj, ev) =>

            {

                watch.Stop();//스탑워치 정지

                lock(locksum)

                {


                    if (watch.ElapsedMilliseconds == 0) goto end; //시간간격이 지나치게 짧은경우 평균 산정에서 아예 제외

                    else if (avgsam.Count < 5) avgsam.Add(new Tuple<double, long>(watch.ElapsedMilliseconds, ev.BytesReceived)); //소요시간 & 현재 이벤트 호출시 받은 바이트양

                    else

                    {

                        double t = 0; //소요시간합

                        double s = 0; //바이트합

                        avgsam.ForEach(x =>

                        {

                            t += x.Item1; 

                            s += x.Item2; 

                        });

                        t /= 1000; //밀리초->초

                        s /= t; //현재까지 받은 바이트 / 현재까지 소요된 초

                        s /= 1024;//바이트->킬로바이트

                        avgsam.Clear();

                        string speed = s.ToString("N2") + "킬로바이트";

                        TaskManager.ControlInvoke(label2, () => label2.Text = string.Format("평균 전송속도:{0}", speed));

                    }

                }

                end:

                watch.Restart(); //스탑워치 재시작

            };


실제 속도보다 훨씬 빠르게 나오는 느낌인데.