CYFROWY BARON • PROGRAMOWANIE • Zobacz wÄ…tek - Aktualizacja kilku progressBar-ów
Strona 1 z 1

Aktualizacja kilku progressBar-ów

Nowy postNapisane: piątek, 16 września 2011, 01:39
przez Slynx
No.. więc tak. Zacznę od kodu :D

KOD cpp:   •  UKRYJ  •
Void Resume(int xxx)
{
       hash->download->updateCallback = gcnew Download::UpdateProgressCallback(this, &ExtLVDownload::_ProgressUpdate);
};


To jest pierwsza wersja funkcji, dopiero staram się to wszystko poskładać w całość (oczywiście wyciąłem to co niepotrzebne).
hash - jest pewnym obiektem - reprezentuje konkretne pobieranie pliku (temat dotyczy aktualizacji progressBar-ów przy pobieraniu wielu plików)
download - jest obiektem klasy, który realizuje samo pobieranie dla danego obiektu (hash);
updateCallback - jest delegatą, która umożliwia aktualizację informacji (szybkość pobierania, pobrane dane, itp).

Jakby to teraz wytłumaczyć...
Obiekt ExtLVDownload jest odpowiednikiem ListView, na nim wyświetlane są wszystkie informacje (czyli progressbary) - załóżmy, że jedno pobieranie na jeden wiersz. Przyjmijmy, że pobieranych jest 5 plików. Dla każdego jest unikatowy obiekt hash, a tworzenie delegaty jest równoznaczne z rozpoczęciem pobierania.
Problem leży w tym, że instancja obiektu ExtLVDownload jest tylko jedna (co jest oczywiste), a do niej jest przypisanych (w tym wypadku) 5 delegat. Już chyba można się domyślić w czym problem.
Jak teraz odróżnić, która z aktualnie wywoływanych delegat powinna aktualizować dane dla którego wiersza.
No i tu nie wiem co zrobić, bo taka aktualizacja nie wysyła żadnych informacji na temat wysyłającego, więc ciężko ustalić który wiersz aktualizować.
Wiem, że można by dodać jeszcze jeden parametr do delegaty, który byłby np. unikatowym identyfikatorem klasy obiektu download, wcześniej tworząc sobie słownik <identyfikator, numer wiersza.


Może to głupie pytanie, ale chcę wiedzieć, czy tak to się robi ? Mam wrażenie, że kombinuje pod górkę. A konkretnych przykładów w internecie już ciężko znaleźć, to raczej dość precyzyjny i rzadki problem. Na razie to zostawiam, bo nie chcę niepotrzebnie mieszać w kodzie.

P.S. Jeśli coś jest niezrozumiałe, to mogę sprostować. Dla mnie kod jest oczywisty, bo cały czas przy nim siedzę, ale nie każdy może to tak łatwo zrozumieć.

Re: Aktualizacja kilku progressBar-ów

Nowy postNapisane: piątek, 16 września 2011, 09:53
przez polymorphism
Kwestia formalna.
download - jest obiektem klasy, który realizuje samo pobieranie dla danego obiektu (hash)
(...)
Obiekt ExtLVDownload jest odpowiednikiem ListView
(...)
Problem leży w tym, że instancja obiektu ExtLVDownload

Obiekt i instancja w tym kontekście oznaczają to samo. ExtLVDownload nie jest obiektem, tylko klasą. I problem nie leży w "instancji obiektu", tylko instancji/obiekcie klasy ExtLVDownload. Zwracaj uwagę na pojęcia, bo są one istotne do tego, żeby zrozumieć, o co Ci chodzi.

Wiem, że można by dodać jeszcze jeden parametr do delegaty, który byłby np. unikatowym identyfikatorem klasy obiektu download, wcześniej tworząc sobie słownik <identyfikator, numer wiersza.

Dodatkowy parametr to najsensowniejsze rozwiÄ…zanie.

Re: Aktualizacja kilku progressBar-ów

Nowy postNapisane: piątek, 16 września 2011, 11:15
przez Slynx
Obiekt i instancja w tym kontekście oznaczają to samo. ExtLVDownload nie jest obiektem, tylko klasą. I problem nie leży w "instancji obiektu", tylko instancji/obiekcie klasy ExtLVDownload. Zwracaj uwagę na pojęcia, bo są one istotne do tego, żeby zrozumieć, o co Ci chodzi.

Zgubiłem słówko. To mi się zdarza. Myślę szybciej niż piszę, dlatego czasami pomijam słówko, bo mam wrażenie, że już je napisałem ;)
Powinienem był jeszcze raz przeczytać całość zanim kliknąłem wyślij, ale wcześnie już nie było ; )

No dobra, to zmodyfikujemy delegatę. Zobaczymy czy nie będzie problemów...