Samstag, 29. Mai 2010

Bestimmte Zeit warten

Viele kennen wahrscheinlich das Problem, die C# - Anwendung soll einfach für eine bestimmte Zeit angehalten werden und erst dann die Ausführung fortsetzen.
Diesen Zweck hat die Funktion System.Threading.Thread.Sleep(). Sie hält den aktuellen Thread um die in Klammern angegebene Zeit in Millisekunden an.
Ein Thread ist eine Art Unterteilung eines Prozesses. Eine C# - Anwendung wird in einem eigenen Prozess gestartet, auf dem Betriebssystem laufen aber auch andere Prozesse, deshalb schaltet das Betriebssystem fortlaufend zwischen den Prozessen um, der jeweils aktive wird dabei ausgeführt.
In unserer C# - Anwendung können wir nun verschiedene Threads erstellen.
Diese laufen scheinbar unabhängig voneinander ab, bekommt unsere Anwendung vom Betriebssystem den "Fokus" wechselt die Anwendung selber noch zwischen den Threads hin und her, so dass der Eindruck von einer simultanen Abarbeitung dieser entsteht.
Eine gewöhnliche Windows Forms - Anwendung besteht aber nur aus einem Thread, so dass folgender Code das ganze Programm für 1 Sekunde einfriert:
System.Threading.Thread.Sleep(1000);

Kommentare:

  1. Hy,

    Gibt es als Abänderung dieses Programms auch eine Möglichkeit die C# - Anwendung anstat nur eine bestimmte Zeit anzuhalten ... es bis zu einem button_Click anzuhalten ?

    Mfg David

    AntwortenLöschen
  2. Hi David,

    da fällt mir leider nichts ein, ich denke das wird schwierig. Denn dieses Sleep() pausiert die ganze Anwendung, in so einem Zustand reagiert das Programm überhaupt nicht, somit kann etwa ein Button Click nicht abgefragt werden.

    Ich würde es manuell implementieren, kommt jetzt natürlich auf die konkrete Anwendung an, aber generell vor allen Aktionen, die der Benutzer anregen kann, Anfragen einbauen, die prüfen, ob das Programm gerade schlafen oder reagieren soll und dann das Programm selber schlafen zu legen oder aufzuwecken.
    Du kannst auch einzelne Steuerelemente deaktivieren sodass der Benutzer nichts mehr machen kann.

    Hoffe das hilft, liebe Grüße
    Oliver

    AntwortenLöschen
  3. Hy Oliver danke für deine Antwort ...

    *hust* also ich habs grob verstanden , ich hab es bis jetzt leider versäumt ( Klausuren ) mich weiter mit dem Problem zu beschäfftigen.

    Also die Anwendung wäre eine Benutzeroberfläche mit der man auf einer anderen Anwendung ein einen bzw mehrere Timer stopen kann ...

    Um eine Zeitaufnahme für eine Laufzeit (Produktionsteile) anzuhalten z.b. über nacht wenn die Maschienen nicht laufen oder übers Weekend.

    Auf der Benutzer(Anwender) Oberfläche sind 2 Buttons einer um eben die Pause zu starten (Timerstoppen) und einer um Sie wieder zu starten.

    Mfg David

    AntwortenLöschen
  4. Hi David, sorry ebenfalls wegen Klausuren antworte ich erst so spät.
    Wo genau hängt's denn jetzt noch (falls du's nicht schon gelöst hast)?
    Buttons kann man prima über die Eigenschaft Enabled aktivierbar machen, bei false kann der Benutzer diese nicht mehr benutzen und es sieht so aus, als ob die Anwendung "schläft".

    AntwortenLöschen