如何在c#中每隔几秒调用一个特定的方法?

时间:2013-04-10 12:28:57

标签: c# timer facebook-c#-sdk

“机器人游戏”是我开发的第一款基本游戏。 Magenta'#'角色是一个敌人,它应该在这张地图中有一个随机的运动,但它的随机运动太快了,我试图使用线程,但它会影响所有角色的速度。现在,我需要每100毫秒调用一次“Enemy”方法。

机器人游戏图片: enter image description here

1 个答案:

答案 0 :(得分:16)

您可以使用System.Timer。但是,要预先警告这些计时器可能没有您想要的那么准确。你永远不会轻易在非实时操作系统(如Windows)上获得完全准确的计时器,但如果你想要更好的计时器准确度,Multimedia timer可能有帮助。

来自MSDN的System.Timer示例:

public class Timer1
{
    private static System.Timers.Timer aTimer;

    public static void Main()
    {
        // Normally, the timer is declared at the class level, 
        // so that it stays in scope as long as it is needed. 
        // If the timer is declared in a long-running method,   
        // KeepAlive must be used to prevent the JIT compiler  
        // from allowing aggressive garbage collection to occur  
        // before the method ends. You can experiment with this 
        // by commenting out the class-level declaration and  
        // uncommenting the declaration below; then uncomment 
        // the GC.KeepAlive(aTimer) at the end of the method. 
        //System.Timers.Timer aTimer; 

        // Create a timer with a ten second interval.
        aTimer = new System.Timers.Timer(10000);

        // Hook up the Elapsed event for the timer.
        aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

        // Set the Interval to 2 seconds (2000 milliseconds).
        aTimer.Interval = 2000;
        aTimer.Enabled = true;

        Console.WriteLine("Press the Enter key to exit the program.");
        Console.ReadLine();

        // If the timer is declared in a long-running method, use 
        // KeepAlive to prevent garbage collection from occurring 
        // before the method ends. 
        //GC.KeepAlive(aTimer);
    }

    // Specify what you want to happen when the Elapsed event is  
    // raised. 
    private static void OnTimedEvent(object source, ElapsedEventArgs e)
    {
        Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
    }
}