Thread: C# timer

  1. #1

    Registered
    11/02/11
    Location
    tielt
    Posts
    3
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0

    C# timer

    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
    Last edited by Fraggie; 23-07-2012 at 11:38. Reason: indent
    no votes  

  2. #2

    Registered
    19/03/09
    Location
    Aalst/Erembodegem
    Posts
    124
    iTrader
    5 (100%)
    Mentioned
    0 Post(s)
    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.
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in