Anonymní profil jerry – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil jerry – Programujte.comAnonymní profil jerry – Programujte.com

 

Příspěvky odeslané z IP adresy 2a00:1028:83be:235a:10a3:ccf5:8abe:2c56...–

jerry
.NET › ProgressBar
26. 5. 2019   #383770

#5 gna, Frank
týjo .. taková kritika :)))))  DoEvents() není špatný .. ale musíš vědět JAK a hlavně KDE to použít. Zjednodušuje to kod, pokud ste odrostli na assembleru a znáte jak funguje procesor a dáte si disassebmlovat C# .NET kod uvidíte že doevents nedělá nic špatnýho ...zkuste si někdy spustit profiler, je mnohem horší mít "seklej" thread na pozadí než sem tam vložit intelignetně doevents. WinForms jako visuální prvky sou jednovlánkový ... i když rozdělíš chod na jiné vlákno stejně se čeká na zprávu z toho vlákna formou callbacku jinak se ti to sekne což je to co se ti stalo.

https://blog.codinghorror.com/is-doevents-evil/

https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.application.doevents?redirectedfrom=MSDN&view=netframework-4.8#System_Windows_Forms_Application_DoEvents

jerry
.NET › ProgressBar
26. 5. 2019   #383768

#1 Frank
Backgroudworker je standardní vlákno jako jakékoliv jiné akorát že se menuje Backgroudworker. Nemuže se ti prg.bar. rozject protože prostě neni čas na obnovování při přepínání vláken - pokud je poloha naplnění správně že - to tu vidět neni. Co třeba ProgressBar.Step ?

https://docs.microsoft.com/cs-cz/dotnet/api/system.windows.forms.progressbar.step?view=netframework-4.8

Taky musíš někam vložit Application.DoEvents() asi do DoWork. a pak taky je potřeba dát ProgressBar.Refresh() a možná i vyvolat Refresh nadřazené komponenty. WinForms jsou komplikovaný. Já bejt tebou bych přešel z WinForms na WPF.

jinak ten tvuj zápis kodu:

int cislo = GenericList[2].ToString() == string.Empty ? 1 : Convert.ToInt32(GenericList[2]);
double jinecislo = GenericList[1].ToString() == string.Empty ? 0 : Convert.ToDouble(GenericList[1]);

to je fakt tragédie ... ty asi budeš mladší ročník co ? ty ses učil programovat někde z nějaký "moderní" učebnice co ? ...

1/ deklarace+definice proměnných je vždy zvlášť na začátku metody pokud k tomu nemáš zvláštní důvody.

2/ použití ? místo if je spíše otázka C/C++ a moc se nepoužívá protože se fakt blbě čte.

3/ GenericList[2].ToString() == string.Empty  ?? to je co ??? přeci si deklaroval že

List<object> Arguments = new List<object>(); ?? ne ?? a přitom tam dáváš různý objekty

ty děláš konverzi na string ??? to nechápu ... a co použít GetType() ??? tohle skončí katastrofou ...

4/ progress bar inicializace:

            this.progressBar2.Visible = true;
            this.progressBar2.Minimum = minLimit;
            this.progressBar2.Maximum = (Int32)maxLimit;
            this.progressBar2.Value = 1;
            this.progressBar2.Step = 1;
            this.progressBar2.Refresh();

progresbar ta část co určuje pozici posuvníku v cyklu:

                this.progressBar2.Value = (Int32)limit; // aktualni pozice
                this.progressBar2.PerformStep();
                this.progressBar2.Refresh();

a ještě drobnost .... používej MS VS 2019.

 

 

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