//데이터의 전체 또는 일부 수신시 호출
client.DownloadProgressChanged += (obj, ev) =>
{
lock(locksum)
{
avgsample.Add(ev.BytesReceived);
}
};
이게 데이터 받은 크기를 리스트에 밀어넣고
async void SpeedCheck()
{
while(true)
{
lock(locksum)
{
long sum = 0;
avgsample.ForEach(x => sum += x);
avgsample.Clear();
string st = sum > 1000 ? sum / 1000 + "KB" : sum + "바이트";
TaskManager.ControlInvoke(label2, () => label2.Text = st);
}
await Task.Delay(1000);
}
}
이쪽은 1초마다 리스트 빼서 합구함.
야 훨씬 보기 깔끔하고 눈에도 잘들어온다야.. c#에도 자체적으로 동기화 기능 제공하는 컨테이너 구현체가 있으니까 그거 쓰면 락 감싸는 블록도 필요없을듯... 그리고 큐에 가짜 데이터 넣고 예상대로 나오는지 보면 됨