[C#] Problem mit For (& If) Abfrage

07/05/2014 19:43 Queen^#1
Hallo Elitepvpers,

Ich wollte grade eine Progressbar (mit dem Marqueestyle) machen und diese 10 Sekunden lang laufen lassen.

Mit Thread.Sleep() hatte es nicht funktioniert (war mein erster Versuch):

Code:
public static void start(int i, char o)
{
     progressBar1.Style = ProgressBarStyle.Marquee;
     progressBar1.MarqueeAnimationSpeed = 15;
 
     Thread.Sleep(10000);

     progressBar1.Style = ProgressBarStyle.Marquee;
     progressBar1.MarqueeAnimationSpeed = 0;

     app(0);
}
Bei diesem Code wird einfach nur die Progressbar ohne irgendwas angezeigt, also mein nächster Versuch mit einer for + if Schleife (Abfrage), der jede Sekunde den int (i) um 1 hochschaltet:

Code:
 for (int i = 0; i <= 10; i++)
            {
                
                if(i < 10)
                {
                    bool o = true;

                    if (o)
                    {
                        progressBar1.Style = ProgressBarStyle.Marquee;
                        progressBar1.MarqueeAnimationSpeed = 15;
                    }
                    
                }

                if (i >= 10)
                {
                    bool o = false;

                    if (!o)
                    {
                        progressBar1.Style = ProgressBarStyle.Marquee;
                        progressBar1.MarqueeAnimationSpeed = 0;
                    }


                }


                Thread.Sleep(1000);
                i++;
Wenn Ich jetzt das Projekt kompiliere dauert's ein paar Sekunden bis das Fenster sichtbar wird und dann passiert auch nichts, was mach Ich falsch? :o

#Edit: Habe jetzt beim 2. Code folgendes geändert:

Code:
for (int i = 1; i <= 10; i++)
also i = 1. Jetzt dauerts auch kurz bis das Fenster sichtbar ist, nur jetzt bleibt der Balken in Action und stoppt nicht ... ?
07/05/2014 20:48 Mostey#2
Mit Thread.Sleep pausierst du hier vermutlich den UI Thread, also den Thread, auf dem die Progress Bar erstellt wurde. Wenn der Thread einfriert (und das tut er bei Thread.Sleep) friert auch deine Progress Bar ein und wird den Wert nicht ändern bzw. anzeigen. Vermutlich wurden auch alle deine Controls in diesem Thread erstellt, weswegen dann die komplette UI einfriert.

Wozu brauchst du das Sleep überhaupt? Du könntest das mit einem BackgroundWorker ausführen und die UI über den UI Thread Dispatcher ändern lassen, hier mehr dazu: [Only registered and activated users can see links. Click Here To Register...]
07/06/2014 00:32 Beni#3
if(o==true) ? kanns daran liegen? bzw if(o==false) ? du hast nur if(o), ich weis nicht ob das geht&habs auch noch nie so gesehen...

Außerdem:
Die abfrage mit dem bool brauchst du eigendlich nicht. Du kannst mit dem if (i<10) {...} bzw else {...} arbeiten. Mehr brauchst du in meinen Augen nicht
07/06/2014 11:06 th0rex#4
Quote:
Originally Posted by Beni​​ View Post
if(o==true) ? kanns daran liegen? bzw if(o==false) ? du hast nur if(o), ich weis nicht ob das geht&habs auch noch nie so gesehen...

Außerdem:
Die abfrage mit dem bool brauchst du eigendlich nicht. Du kannst mit dem if (i<10) {...} bzw else {...} arbeiten. Mehr brauchst du in meinen Augen nicht
Natürlich geht das und ich sehe eigentlich nie if(someBool == true). Bei dem 2. Teil hast du Recht. Dafür extra einen bool zu machen ist komplett unnötig. Den Rest hat Mostey schon gesagt.
07/06/2014 12:51 .SkyneT.#5
ab .NET 4.5:
Code:
public async void executeDelayed(Action action, int time)
{
   await Task.Delay(time);
   action();
}
07/07/2014 14:34 Queen^#6
Quote:
Originally Posted by omitma View Post
Natürlich geht das und ich sehe eigentlich nie if(someBool == true). Bei dem 2. Teil hast du Recht. Dafür extra einen bool zu machen ist komplett unnötig. Den Rest hat Mostey schon gesagt.
Ja, das mit dem if(wert) geht. Mit dem Bool ist unnötig, ja.

Aber Ich suche mal noch n bisschen weiter^^
07/08/2014 19:48 L & M#7
Mach doch einfach einen zweiten Thread für deine Progressbar auf, der nicht über die UI läuft, wie Mostey schon beschrieben hat, kann es dadurch kommen.

- L & M