Jest osobna klasa do downloadu, która wewnątrz odpala pobieranie na nowym wątku. Jedyną informacją, że "żyje", jest ciągłe invoke (nasz delegate) z informacją o ilości pobranych danych. Wcześniej przez argument podawałem całego progressbara, którego aktualizował, ale teraz w nowej wersji komponentu, który ma obsługiwać, progressbar jako taki nie istnieje. Zapis odbywa się poprzez specjalną funkcję, która aktualizuje cały rekord, za pomocą danych typu String^ lub int.
To jest typowe pobieranie.
down->Create_New_Thread();
Co do klasy Download (.h)
Void Update_Progress(int percentage_progress);
delegate System::Void UpdateProgessCallback(int percentage_progress);
UpdateProgessCallback ^upd;
Download(String^ url, String^ download_file, bool paused, String^ out);
Plik cpp
{
url_ = url;
local_file_path_ = download_file;
progress = &out;
upd = gcnew UpdateProgessCallback(this, &Download::Update_Progress);
};
Void Download::Update_Progress(int percentage_progress)
{
progress = percentage_progress.ToString();
}
//oraz w pętli już samego pobierania
upd->Invoke(stream_local->Length);
/// gdzie stream_local zawiera pobrane dane
To chyba wszystko co jest potrzebne.
Więc, można takiego Stringa jakoś podać przez konstruktor by go aktualizował. Mam jeszcze jedno pytanie, bo już nie jestem pewien co do tego Invoke.
Download^ down = gcnew Download("http://programowanie.cal.pl/babilon/babilonsetup203.zip","C://babilon.zip", false, text);
down->Create_New_Thread();
Czy to też by działało ? Przypominam, że "String^ text = label3->Text;" wykonałoby się tylko raz, bo nie jest w pętli.
Próbowałem jeszcze dodać do tego Stringa jakieś referencje(czyli tak jakbym zrobił w natywnym), ale trochę mi namieszaliście faktem, że "^" też oznacza referencje, to już się pogubiłem czy zapis tego typu "String^ &tekst - label3->Text;" miałby jakikolwiek sens:/






