C# Progressbar fungující i pod zatížením – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C# Progressbar fungující i pod zatížením – .NET – Fórum – Programujte.comC# Progressbar fungující i pod zatížením – .NET – Fórum – Programujte.com

 

Attila
~ Anonymní uživatel
18 příspěvků
3. 11. 2011   #1
-
0
-

Aplikace přistupuje do databáze a provádí výpočty v délce od minut do hodin. Během této doby je natolik vytížená, že zamrzne. Potřebuji informovat uživatele o průběhu výpočtů, nejlépe oknem s progressbarem. Jak zařídit, aby se progressbar aktualizoval i přes vytížení procesoru? Předpokládám, že progresbar by měl běžet v jiném vlákně. Jistě jde o běžnou programátorskou konstrukci, poradíte mi?

Nahlásit jako SPAM
IP: 178.72.192.–
Attila
~ Anonymní uživatel
18 příspěvků
3. 11. 2011   #2
-
0
-

#1 Attila
Možná ještě lepší by bylo, na konci některého cyklu zastavit program a donutit ho překreslit okno. Je to cesta?

Nahlásit jako SPAM
IP: 178.72.192.–
liborb
~ Redaktor
+18
Guru
3. 11. 2011   #3
-
0
-

Vůbec bych se nebál vyhodit tu dlouhotrvající práci do vlákna a klidně bych mu dal i o něco málo nižší prioritu, ale to není nutné. A samozřejmě aktualizovat progress jednou za čas nebo při opravdové změně (při překreslení).

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 82.145.209.–
Mettiu
~ Anonymní uživatel
1 příspěvek
4. 11. 2011   #4
-
0
-

#1 Attila
V .NET-e sa táto problematika da riesit velmi jednoducho. A to pouzitim triedy BackgroundWorker. Cize riesenie problemu by sa dalo riesit nasledovne:

                // Na tomto mieste som vytvoril novu instanciu triedy ktora zobrazila dialogove okno s progressbarom
                var worker = new BackgroundWorker(); // Vytvoril som novy BackgroundWorker
                worker.WorkerSupportsCancellation = false; /* Nastavil som mu zabranenie zrusenia vykonavania (ja som to potreboval tak ty to mozno budes vo svojej aplikacii potrebovat inak) */

                worker.DoWork += delegate
                {
                    /* Tu som umiestnil kod, ktory sa vykonaval na pozadi. V mojom pripade to bol dotaz na databazu, ktory  trval dost dlho */
                };

                worker.RunWorkerCompleted += delegate
                {
                    // Tu som umiestnil kod, ktory sa ma vykonal az sa dokoncil dotaz (cize zavretie dialogoveho okna)
                };

                worker.RunWorkerAsync(); // Spustil som BackgroundWorker

                /* Tu som umiestnil kod, ktory zobrazil dialogove okno s progressbarom

Ja som pouzil progressbar s vlastnostou IsIndeterminate = true cize progressbar, v ktorom som neriesil postupnu inkrementaciu lebo by bo bolo dost komplikovane (v mojom pripade). Da sa vsak implementovat aj klasicky progressbar s postupnym inkrementovanim priebehu. Na nasledujucom linku je nejaky kratky tutorial a na nete ich najdes viac ak by nestacil. http://www.dotnetperls.com/progressbar


Nahlásit jako SPAM
IP: 88.212.1.–
Attila
~ Anonymní uživatel
18 příspěvků
4. 11. 2011   #5
-
0
-

Děkuji za odpovědi. O víkendu se jim budu věnovat a napíšu.

Nahlásit jako SPAM
IP: 178.72.192.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 32 hostů

Podobná vlákna

Upload fungující pod PHP5 — založil mike007

Shoutbox fungující na IC — založil arzen

Podivně fungující switch — založil spider-x

ProgressBar — založil Anderos

ProgressBar — založil Frank

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý