Подскажите как в данном примере получать brSize = e->BytesReceived; раз в секунду
весь пример попытка получить скорость скачивания;
Код:
_WebClient->DownloadFileCompleted += gcnew AsyncCompletedEventHandler(this, &Form1::_DownloadFileCompleted);
_WebClient->DownloadProgressChanged += gcnew System::Net::DownloadProgressChangedEventHandler(this, &Form1::_DownloadProgressChanged);
_WebClient->DownloadFileAsync(gcnew Uri(_URL), _SaveAs);
тут срабатывает постоянно поэтому значение brSize не раз в секунду как нам надо.
Код:
void Form1::_DownloadProgressChanged(System::Object ^sender, System::Net::DownloadProgressChangedEventArgs ^e)
{
brSize = e->BytesReceived;
brSizeLast = brSize - brSizeLast;
Int64 tbtrSize = e->TotalBytesToReceive;
Int64 ProgressPercentage = brSize * 100 / (tbtrSize);
String^ drawString = Convert::ToString(ProgressPercentage) + "%"+Convert::ToString(diff);
System::Drawing::Font^ drawFont = gcnew System::Drawing::Font( "Arial",8.25 );
SolidBrush^ drawBrush = gcnew SolidBrush( Color::Black );
PointF drawPoint = PointF(324/2 - 10, 23 / 2 - 7);
progressBar1->Refresh();
progressBar1->CreateGraphics()->DrawString( drawString, drawFont, drawBrush, drawPoint );
progressBar1->Value = e->ProgressPercentage;
}
функция на таймере раз в 1сек срабатывает
Код:
void Form1::dSpeed(System::Object^ sender, System::EventArgs^ e)
{
Int64 diff = (brSize-brSizeLast)/1024;
}
p.s переменные обьявлены глобально
Код:
Int64 brSizeLast = 0;
INT64 brSize = 0;
Int64 diff = 0;
вся функция откуда что вызывается
Код:
void Form1::DownloadFile(System::String ^_URL, System::String ^_SaveAs)
{
System::Net::WebClient ^_WebClient = gcnew System::Net::WebClient();
WebRequest^ myRequest = WebRequest::Create(_URL);
WebResponse^ myResponse = myRequest->GetResponse();
Int64 iSize = myResponse->ContentLength;
myResponse->Close();
progressBar1->Visible = true;
exit_button->Enabled = false;
login_box->Enabled = false;
password_box->Enabled = false;
this->Time = (gcnew System::Windows::Forms::Timer(this->components));
this->Time->Enabled = true;
this->Time->Interval = 1000;
this->Time->Tick += gcnew System::EventHandler(this, &Form1::dSpeed);
_WebClient->DownloadFileCompleted += gcnew AsyncCompletedEventHandler(this, &Form1::_DownloadFileCompleted);
_WebClient->DownloadProgressChanged += gcnew System::Net::DownloadProgressChangedEventHandler(this, &Form1::_DownloadProgressChanged);
_WebClient->DownloadFileAsync(gcnew Uri(_URL), _SaveAs);
while(_WebClient->IsBusy)
{
Application::DoEvents();
}
}