Inteligentny ProgressBar w Windows Forms

Odpowiedz Nowy wątek
2011-07-12 12:00
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 :)

edytowany 3x, ostatnio: Ferrari, 2011-07-12 12:04

Pozostało 580 znaków

2011-07-12 12:23
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.

Pozostało 580 znaków

2011-07-12 12:32
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.

edytowany 1x, ostatnio: Ferrari, 2011-07-12 12:32

Pozostało 580 znaków

2011-07-12 12:44
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.

Pozostało 580 znaków

2011-07-12 12:54
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.

edytowany 1x, ostatnio: Ferrari, 2011-07-12 12:54

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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