Forum: PC-Programmierung Timer in C# mit abfrage


von Daniel B. (yzdani)


Lesenswert?

Servus,

Wie kann ich C# eine art Abfrage mit einem Timer machen?
Das Ganze soll so aussehen:

Button 1 wird gedrückt, der Timer startet und der Button 1 wird 
gesperrt.

Wenn Button 2 gedrückt wird bevor der Timer abläuft bleibt button 1 
gesperrt.
Wenn dieser fall nicht eintritt soll der Timer neu starten..

Danke im Voraus!

Gruss
Dani

von Tek (Gast)


Lesenswert?

Daniel R. schrieb:
> Wenn Button 2 gedrückt wird bevor der Timer abläuft bleibt button 1
> gesperrt.

Was passiert mit dem Timer wenn Button 2 gedrückt wird?

> Wenn dieser fall nicht eintritt soll der Timer neu starten..

Was passiert mit Button 1 wenn der Timer abläuft?
Und wenn er ein 2tes mal abläuft?

von Daniel B. (yzdani)


Lesenswert?

Wenn Button 2 gedrückt wird soll button 1 gespert werden
Der Timer kann auch stoppen.

Wenn Button 2 nicht gedrückt wird soll sich das ganze solang wiederholen 
bis button 2 gedrückt wird

von Tek (Gast)


Lesenswert?

Daniel R. schrieb:
> Wenn Button 2 gedrückt wird soll button 1 gespert werden
> Der Timer kann auch stoppen.

Der ist doch schon durch den druck auf Button 1 gesperrt oder?

Schreib mal auf was zu den jeweiligen Zuständen passieren soll, das 
packst Du dann in die jeweiligen Events:

Ich gehe mal davon aus das ganze soll so ablaufen:

Button 1 Clickevent
- Button 1 sperren
- Timer enable

Button 2 Clickevent
- Timer disable

Timerevent
- Timer disable
- Button 1 freigeben

von Daniel B. (yzdani)


Lesenswert?

Das mag er nicht gibt ne exception...

Cross-thread operation not valid: Control 'button1' accessed from a 
thread other than the thread it was created on."}  System.Exception 
{System.InvalidOperationException}
1
private void button1_Click(object sender, EventArgs e)
2
        {
3
            aTimer.Enabled = true;
4
            button1.Enabled = false;
5
        }
6
7
        private void button2_Click(object sender, EventArgs e)
8
        {
9
            aTimer.Enabled = false;
10
        }
11
12
        private void timer_is_working(object source, ElapsedEventArgs e)
13
        {
14
            aTimer.Enabled = false;
15
            button1.Enabled = true;
16
        }

von Karl H. (kbuchegg)


Lesenswert?

Daniel R. schrieb:
> Das mag er nicht gibt ne exception...
>
> Cross-thread operation not valid: Control 'button1' accessed from a
> thread other than the thread it was created on."}  System.Exception
> {System.InvalidOperationException}

Lies mal im C# Buch deines Vertrauens unter dem Stichwort 'Invoke' nach.

von Karl H. (kbuchegg)


Lesenswert?

Daniel R. schrieb:
> Wenn Button 2 gedrückt wird soll button 1 gespert werden
> Der Timer kann auch stoppen.
>
> Wenn Button 2 nicht gedrückt wird soll sich das ganze solang wiederholen
> bis button 2 gedrückt wird

Versteh ich nicht.
Wozu dann der Timer?

Button 1 wird gesperrt, wenn Button 2 gedrückt wird. Was soll dann der 
Timer?

von Fräulein Eysenbarth (Gast)


Lesenswert?

http://www.mycsharp.de/wbb2/thread.php?threadid=33113

Du könntest in deinem Fall vermutlich auch einfach 
System.Windows.Forms.Timer verwenden.

Zum Problem selbst: Beschreibe doch nicht immer alles stückchenweise aus 
der Ameisenperspektive, sondern den Sinn und das Ziel dahinter.

Hatte ich bereits erwähnt, dass es sinnvoll wäre, wenn du erst einmal 
ein Buch oder zumindest ausführliches Tutorial durcharbeiten würdest? 
Ja, ich glaube schon ... ;-)

von Daniel B. (yzdani)


Lesenswert?

Was der Invoker alles kann :D
Funzt jetzt:
1
 private void timer_is_working(object source, ElapsedEventArgs e)
2
        {
3
            try
4
            {
5
                if (InvokeRequired)
6
                {
7
                    Invoke(new MethodInvoker(do_some_gui_operation));
8
                }
9
            }
10
            catch
11
            {
12
                return;
13
            }
14
        }
15
16
        private void do_some_gui_operation()
17
        {
18
            try
19
            {
20
                button1.Enabled = true;
21
            }
22
            catch
23
            {
24
                return;
25
            }
26
        }

Fräulein Eysenbarth schrieb:
> Hatte ich bereits erwähnt, dass es sinnvoll wäre, wenn du erst einmal
> ein Buch oder zumindest ausführliches Tutorial durcharbeiten würdest?
> Ja, ich glaube schon ... ;-)



Stimmt ja, lernen in der Schule C# allerdings nur langsamm..
Aber jetzt sind ja noch Ferien... da bin ich eher für die Learning by 
Doing methode...

von Horst (Gast)


Lesenswert?

Warum so ein Umstand mit invoke? Warum wird nicht einfach wie 
vorgeschlagen der System.Windows.Forms.Timer benutzt?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.