Laden...

Suche Sleep Methode, die das GUI nicht blockiert

Erstellt von halloman vor 13 Jahren Letzter Beitrag vor 13 Jahren 868 Views
Thema geschlossen
H
halloman Themenstarter:in
11 Beiträge seit 2010
vor 13 Jahren
Suche Sleep Methode, die das GUI nicht blockiert

nabend

Ich habe einen BackGroundworker in mein Projekt integriert.
ich habe eine definierte
int ms = XXX;
die wird auch erfolgreich an den Backgroundworker weitergegeben und bei
bw.RunWorkerAsync();
macht er auch seinen XXX sleep.

jetzt ist mien Problem ich bekomme das nicht in einen vernünftige "Sleep" Methode rein.
Also würde gerne eine Funktion haben z.B.


public void sleep(int ms)
{

            Messagebox.Show("geht los");
            if (bw.IsBusy != true)
            {
                bw.RunWorkerAsync();
            }
            Messagebox.Show("vorbei");

}
5.742 Beiträge seit 2007
vor 13 Jahren

Hallo halloman,

um ehrlich zu sein, habe ich weder deine Frage, noch deinen Code wirklich verstanden.

Suchst du evtl. nach einem Timer? Die Verwendung von Thread.Sleep (zielst du darauf ab?) deutet meistens auf suboptimales Design hin.

H
halloman Themenstarter:in
11 Beiträge seit 2010
vor 13 Jahren

ja genau das meine ich..suche eine Alternative zu thread.sleep wegen dem freez.

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo,

und wieso willst du überhaupt schlafen?
Entweder du verwendest dafür einen Timer oder du verwendest dafür einen Timer =)
Damit kannst du Aufgaben in einem bestimmten Intervall aufrufen lassen

Zum Thema freeze siehe: [FAQ] Warum blockiert mein GUI?

Gruß
Michael

H
halloman Themenstarter:in
11 Beiträge seit 2010
vor 13 Jahren

na Ok timer hört sich ja gut an ^^

aber Timer kann ich ja auch nur sagen er soll alle XXms ticken oder nicht?

er soll ja jedesmal andere sachen machen
zum Beispiel

        
            Sleep.Interval = 3000;
            Sleep.Start();
                

so würde der doch 3sek laufen dann soll er z.B. das machen

MessageBox.Show("3 sek sind um");

wie geht das

5.742 Beiträge seit 2007
vor 13 Jahren

so würde der doch 3sek laufen dann soll er z.B. das machen

Naja - das steht in der :rtfm: Doku: Aboniere das Tick Event und schreibe deinen Code in dessen Handler.

5.742 Beiträge seit 2007
vor 13 Jahren

Bitte keine Nachfragen zu Threads per PN!

ich versteh die Fachsprache nicht so. Was bedeutet denn abonieren?

soweit habe ich das ja

  
Sleep.Interval = 2500;  
Sleep.Tick += new EventHandler(Sleep_tick);  
Sleep.Start();  
  
public void Sleep_tick(int ms)  
{  
}  
  

aber ich möchte keine Methode aufrufen sondern einfach im Code fortfahren

Alles zu Events kannst du nachlesen in [FAQ] Eigenen Event definieren / Information zu Events.
Windows-Forms Programmierung erfolgt generell ereignisgesteuert: Statt den Code sequentiell abarbeiten zu lassen, legt man über die Events sozusagen fest, worüber man sich benachrichtigen lassen möchte.
In deinem Fall sollte es für dich keinen Unterschied machen (außer, dass dein GUI nicht blockiert), ob du 2500 Millisekunden wartest oder ob du nach 2500 Millisekunden eine Methode aufrufen lässt, in die du genau den Code schreiben kannst, den du ansonsten nach dem Sleep schreiebn würdest.

Bitte schaue aber in die Doku: Dort, und generell auch im Internet finden sich zahlreiche Beispiele, wie du den Timer richtig verwendest.
==> Geschlossen

Thema geschlossen