Archief - C# timer

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

tiemen166

Legacy Member
Hallo

Ik ben bezig met een atletiekpiste te maken. De totale tijd wordt "totaleT" genoemd . De tijd is tot 1 tiende en de interval is op 1 honderste ingesteld, bij 110 keren de loop doorlopen moet de timer stoppen. Wanneer blijk ik via DateTime het verschil te bekijken , dat er een verschil is van een paar seconden. Weten jullie hoe dit zo komen?

Wanneer de timer niet zo kan werken, zal het wel via de System.DateTime lukken, denk ik.

Code:
private void button2_Click(object sender, EventArgs e)
        {
            
            panel1.BackgroundImage = Bitmap.FromFile("AtletiekPiste2.png");
            
            totaleT = int.Parse(txtTotaleH.Text);//110
            PixelPerT = 400 / totaleT;

            timer1.Enabled = true;
            
        }


        private void timer1_Tick(object sender, EventArgs e)
        {
            DateTime d1 = DateTime.Now;
            Graphics g = panel1.CreateGraphics();
            aantalT++;           
            aantalPixD = PixelPerT * aantalT;
            string woord = aantalPixD.ToString();
            string nieuwWoord = "";
        
            for (int i = 0; i < woord.Length; i++)
            {

                string letter = woord.Substring(i, 1);
                if (letter != ",")
                {
                    nieuwWoord += letter;
                }
                else
                {
                    break;
                }

            }            
            aantalPixI = int.Parse(nieuwWoord);

            if (aantalT != totaleT)
            {
                g.DrawImage(Bitmap.FromFile("bal.png"), 110 + aantalPixI, 450);       
            }
            else
            {
               
                timer1.Enabled = false;
               

            }   
            DateTime d2 = DateTime.Now;
           
            int M1 = 0;
            int M2 = 0;
            string nieuwGetal = "";
            try
            {
                for (int i = 0; i < d1.Millisecond.ToString().Length - 1; i++)
                {
                    string letter = d1.Millisecond.ToString().Substring(i, 1);
                    nieuwGetal += letter;
                }
                M1 = int.Parse(nieuwGetal);
                nieuwGetal = "";
                for (int i = 0; i < d2.Millisecond.ToString().Length - 1; i++)
                {
                    string letter = d2.Millisecond.ToString().Substring(i, 1);
                    nieuwGetal += letter;
                }

                M2 = int.Parse(nieuwGetal);
                verschil = M2 - M1;
                aantalT += verschil;
            }
            catch
            {
            }
}
groetjes tiemen

cptKangaroo

Legacy Member
Je code is met dat grafische werk te kostelijk qua tijd om binnen 0.01 seconde uitgevoerd te worden, en een Forms.Timer is sowieso niet accuraat genoeg (Timer Class).

Zelfs met een accuratere en multithreaded System.Timer (of Threading.Timer) ga je nog steeds tegen de beperkingen van de Form aanlopen als je met Tick() events werkt, denk ik.

Je kan misschien best een eigen Control maken met een overriden OnPaint() om de refresh snelheid zo laag mogelijk te krijgen.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan