Inteligentny ProgressBar w Windows Forms

0

Witam!

Zastanawiam się jak stworzyć inteligentny ProgressBar, tj. taki, który będzie "na żywo" uczył się jak szybko ma się inkrementować jego wartość.

Przykładowy opis problemu:

  • Mam Form1, na niej jest progressBar1.
  • Form1 wywołuje Form2.
  • progressBar1 ma pokazywać postęp ładowania Form2.
  • Podczas inicjalizacji Form2 dzieje się jednak dużo obliczeń (m.in. pobieranie danych z innych aplikacji). W zależności od komputera i ilości pobieranych danych, trwa to od kilku do kilkunastu sekund, więc nie mogę ustawić postępu progressBar'a na stały przyrost.

Niestety nie mogę znaleźć rozwiązania, jak sprawić aby ProgressBar inkrementował swoją wartość proporcjonalnie do czasu ładowania Form2. Musi dynamicznie rozpoznawać ile czasu +/- potrzeba jeszcze na całkowite załadowanie Form2, i musi odwierciedlać to graficznie na pasku postępu.

Będę bardzo wdzięczny za wszelką pomoc :)

0

Musiałbyś wiedzieć ile danych total musi pobrać form2 i jak pobierzesz jakiś pakiet danych obliczać ile to procent totalu.
Jeśli nie jesteś w stanie tego zrobić, to lepiej aby progressBar pokazywał liczbę zadań jakie wykonał z ilu. Bo jak piszesz jeśli Kowalski ma dwa razy wolniejsze łącze od Nowaka, to ciężko pokazać realny czas, do tego moc obliczeniowa kompa etc.

0

No właśnie problem jest taki, że rozmiary i ilość pobieranych danych są zmienne - raz może być kilkadziesiąt obiektów, a raz kilkaset. Do tego dochodzi jeszcze problem ze zmiennym czasem oczekiwania na odpowiedź zewnętrznego serwera + moc obliczeniowa komputera.

Spróbuję więc zrobić tak jak piszesz - czyli zliczyć podzadania i pokazywać na progressBarze ilość aktualnie zrealizowanych.

Dzięki za odpowiedź :)

Jeśli ktoś miałby jeszcze jakieś ciekawe rozwiązania tego problemu (mogą być trudne), to chętnie się z nimi zapoznam.

0

W jakiejś aplikacji zastosowałem też taką sztuczkę że niektóre zadania stanowiły np. 10% całości, a inne 40%. Bo np. pobranie wartości do jednej labelki jest szybsze niż kilkuset rekordów do grida. Czy wyliczenie czegoś u klienta często bywa szybsze niż zaciąganie danych z serwera.

0
massther napisał(a)

W jakiejś aplikacji zastosowałem też taką sztuczkę że niektóre zadania stanowiły np. 10% całości, a inne 40%. Bo np. pobranie wartości do jednej labelki jest szybsze niż kilkuset rekordów do grida. Czy wyliczenie czegoś u klienta często bywa szybsze niż zaciąganie danych z serwera.

Dzięki, przyda się :) Będę kombinował w ten sposób i zobaczymy na ile uda się stworzyć "inteligencję" progressBar'a.

1 użytkowników online, w tym zalogowanych: 0, gości: 1