Timer.Elapsed回调未被触发

时间:2014-08-31 08:32:43

标签: c# plugins timer

编辑:我缩短了代码示例

我在C#编码,试图设置一个计时器。 我以前做过,但这次根本没用。 我无数次看过它,找不到什么错! 请帮忙!

计时器应该以RestoreMana()方法启动,但它似乎不是。 然后,计时器应该每秒(1000毫秒)运行restoreTimer_Elapsed()。 这似乎也不是这样。

此代码适用于Terraria TShock插件并使用其中的包,但计时器来自System.Timers。那么有人可以帮忙吗? :d 谢谢!

ALT Pastebin link:http://pastebin.com/WU7j3aqe

//'Import' necessary packages
using System;
using TShockAPI;
using Terraria;
using TerrariaApi.Server;
using System.Timers;

namespace Restore
{
        //Variables
        private Timer restoreTimer = new Timer(1000);

        public override void Initialize()
        {
            //Calls CallRestore() when /restore is typed
            Commands.ChatCommands.Add(new Command("fmg.restore", CallRestore, "restore"));

            //Setup the Timer
            restoreTimer.Elapsed += new ElapsedEventHandler(restoreTimer_Elapsed);
            restoreTimer.Interval = 1000;
            restoreTimer.AutoReset = true;
            restoreTimer.Enabled = false;
        }

        //There would usually be more code here but I shortened it
        private void CallRestore(CommandArgs args)
        {
            RestoreMana(args);           
        }

        //This doesn't get run
        private void restoreTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            player.SendMessage("Timer", Color.Aqua);
        }

        //Starts restoreTimer
        private void RestoreMana(CommandArgs args)
        {
            restoreTimer.Start();
        }

    }
}

1 个答案:

答案 0 :(得分:0)

注意:我希望你现在就像1个月前提出这个问题一样解决这个问题。

无论如何,正如评论中所述,我会说你的问题似乎就在这一行:

        restoreTimer.Enabled = false;

应该是:

        restoreTimer.Enabled = true;

...除非您在调用restoreTimer.Start()之前在其他位置设置此布尔值;