CupCode Gamers
From the Cup, to the Code, for the Gamers
  • News
  • Games and Apps
    • Baseball Score Tracker
    • Droplets
    • Jet Fighter
    • Jet Fighter Neon
    • Short Circuit
    • ThaumCheater
    • Tic-Tac-Toe
    • Zombie Swarm
  • Other Pages
    • Facebook
    • Itch-IO
    • Surviving Ars Magica 2
    • Steam Group
    • YouTube Channel
  • Sneaky Peeky
  • C# Tutorials
  • About Us
  • Policies
  • Contact Us

A Simple Timer

3/27/2017

Today I found out that System.Timers.Timer is buggy and doesn’t work when used in a windows service application. Microsoft suggests we use the System.Threading.Timer object instead.

http://support.microsoft.com/kb/842793

I looked into it, and found that to use the System.Threading.Timer object, you have to supply it with a delegate to a static method that it can call when the timer event is triggered. In my application, that means I would have to change virtually all my methods and variables to being static, not something that I wanted to do. So instead I wrote my own timer, using the System.Threading methods. This is a fairly simple timer system:

using System;
using System.Threading;

class TimerExample
{
    static void Main()
    {
        AutoResetEvent arv = new AutoResetEvent(false);
        bool Stop = false;
        int called = 0;

        while(Stop == false)
        {
            arv.WaitOne(5000);
            called++;
            Console.WriteLine(string.Format("Waited: {0}", called));
            if(called == 10)
                Stop=true;
        }
    }
}

There’s one thing to keep in mind here; this effectively locks up the current thread until the elapsed time has passed. In the above example, the elapsed time is 5 seconds (5000 milliseconds). It shouldn’t take very much to build this concept into an instantiable class that uses a separate processing thread to prevent locking up your application until the elapsed time, and I’d highly advise that you do so.

Today’s discovery of this bug in a Microsoft system class only serves to validate my belief that you should always fully research any method someone else writes before you use them.


Respond

Copyright © 2020 CupCode Gamers / Jason Yarber

Privacy Policy