none
Timer setzen RRS feed

  • Frage

  • hallo alle zusammen

    ich bin gerade dabei ein kleines programm zu schreiben, das mir die zeit (in ms) die ich benötige, nach dem drücken des "start"-buttons  (button1), ausgibt.

    aber irgendwie will das nicht so recht....muss ich noch was converten, oder fehlt eher noch ein befehl?

     

    vielen dank

    fg velisch

     

     

    namespace time_track

    {

    public partial class Form1 : Form

    {

    double i=0;

    double zeit;

    public Form1()

    {

    InitializeComponent();

    timer1.Interval = 1;

    }

    private void timer1_Tick(object sender, EventArgs e)

    {

    i+= 1;

    }

    private void button1_Click(object sender, EventArgs e)

    {

    timer1.Start();

    button1.Visible = false;

    }

     

     

    private void Form1_MouseDown(object sender, MouseEventArgs e)

    {

    if (e.Button == MouseButtons.Left)

    {

    timer1.Stop();

    }

    MessageBox.Show("Sie haben " + i + " ms ben”tigt!");

    }

    }
    Montag, 27. Oktober 2008 19:08

Antworten

  • Hallo Velisch

    Der Timer ist für solcheine Aufgabe ungeeignet da er dafür zu langsam ist. Bei mir z.B. schaft er maximal 16ms Interwalle. Für eine Auflösung bis hin zu 1ms gibts die Funktion Environment.TickCount(). Habe dein Beispiel dafür etwas umgearbeitet.

    Code Snippet

    namespace time_track

    {

        public partial class Form1 : Form

        {

            private int StartTime = 0;

            public Form1()

            {

                InitializeComponent();

            }

            private void button1_Click(object sender, EventArgs e)

            {

                StartTime = Environment.TickCount();//Startzeit merken //Environment.TickCount() ist im Namespace System{}

            button1.Visible = false;

            }

            private void Form1_MouseDown(object sender, MouseEventArgs e)

            {

                if (e.Button == MouseButtons.Left)

                {

                    int ElapsedTime = (Environment.TickCount() - StartTime);//Ben”tigte Zeit in ms ermitteln

                    MessageBox.Show("Sie haben " + ElapsedTime.ToString() + " ms ben”tigt!");

                    button1.Visible = true;

                }

            }

        }

    }

    Donnerstag, 12. Februar 2009 09:48

Alle Antworten

  • Hallo Velisch,

     

    sieht so ganz gut aus und funzt jetzt auch, hattest nur eine Klammer zu viel in Deiner if-Anweisung...

     

    Code Snippet

    namespace WindowsApplication2

    {

          public partial class Form1 : Form

          {

            private double i = 0;

     

            public Form1()

            {

                InitializeComponent();

            }

      

            private void button1_Click(object sender, EventArgs e)

            {

                timer1.Start();

                button1.Visible = false;

            }

     

            private void timer1_Tick(object sender, EventArgs e)

            {

                i++;

            }

     

            private void Form1_MouseDown(object sender, MouseEventArgs e)

            {

                if (e.Button == MouseButtons.Left)

                {

                     timer1.Stop();

                     MessageBox.Show("Sie haben " + i + " ms benötigt!");

                }

            }

          }

    }

     

     

    Ach ja, die Variable double zeit; wurde nicht genutzt.

     

    Gruß, Doug_HH

    Montag, 27. Oktober 2008 20:19
  •  

    hey doug,

     

    danke für die schnelle bemühung, aber das is es leider nicht. hab vielleicht die die klammer beim reinkopieren vergessen.

     er spuckt mir in der messagebox irgendeine zeit aus, die laut meiner "referenzstoppuhr" gar nicht stimmen kann.

    noch dazu auch nur wenn auf die Form1 fläche klick(wo der timer nicht einmal gestartet sein soll).

     

    - stimmt das intervall 1, für millisekunden?

    - bzwfängt er richtig zu zählen an?

     

    fg velisch

    Montag, 27. Oktober 2008 20:43
  • Hallo Velisch,

     

    man sagt, dass der Timer erst ab 500 ms korrekt arbeitet.

    Ich habe es noch nicht getestet.

     

    Hier noch ein Vorschlag um die anderen Probleme zu lösen...

     

     

    Code Snippet

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Text;

    using System.Windows.Forms;

    namespace WindowsApplication2

    {

    public partial class Form1 : Form

    {

        private double i = 0;

        private bool _timerLaeuft = false;//Variable für Timer

       

        public Form1()

        {

           InitializeComponent();

        }

     

        private void button1_Click(object sender, EventArgs e)

        {

           timer1.Start();

           _timerLaeuft = true;//Variable auf true setzen, wenn der Timer läuft

           button1.Visible = false;

        }

     

        private void timer1_Tick(object sender, EventArgs e)

        {

          i++;

        }

     

        private void Form1_MouseDown(object sender, MouseEventArgs e)

        {

             if (_timerLaeuft == true)

             {

                 if (e.Button == MouseButtons.Left)

                 {

                     timer1.Stop();

                     _timerLaeuft = false;//Variable auf false setzen, wenn Timer nicht mehr läuft

                     button1.Visible = true;

                     MessageBox.Show("Sie haben " + i + " ms benötigt!");

                     i = 0;//ms auf 0 setzen

                 }

             }

        }

      }

    }

     

     

    Gruß, Doug_HH
    Dienstag, 28. Oktober 2008 19:16
  • Hallo Velisch

    Der Timer ist für solcheine Aufgabe ungeeignet da er dafür zu langsam ist. Bei mir z.B. schaft er maximal 16ms Interwalle. Für eine Auflösung bis hin zu 1ms gibts die Funktion Environment.TickCount(). Habe dein Beispiel dafür etwas umgearbeitet.

    Code Snippet

    namespace time_track

    {

        public partial class Form1 : Form

        {

            private int StartTime = 0;

            public Form1()

            {

                InitializeComponent();

            }

            private void button1_Click(object sender, EventArgs e)

            {

                StartTime = Environment.TickCount();//Startzeit merken //Environment.TickCount() ist im Namespace System{}

            button1.Visible = false;

            }

            private void Form1_MouseDown(object sender, MouseEventArgs e)

            {

                if (e.Button == MouseButtons.Left)

                {

                    int ElapsedTime = (Environment.TickCount() - StartTime);//Ben”tigte Zeit in ms ermitteln

                    MessageBox.Show("Sie haben " + ElapsedTime.ToString() + " ms ben”tigt!");

                    button1.Visible = true;

                }

            }

        }

    }

    Donnerstag, 12. Februar 2009 09:48