计时器.已用回调未被触发

本文关键字:回调 计时器 | 更新日期: 2023-09-27 18:20:16

编辑:我缩短了代码示例

我正在用 C# 编码,试图设置一个计时器。我以前做过,但这次它根本不起作用。我翻看了无数遍,找不到哪里不对!请帮忙!

计时器应该在 RestoreMana(( 方法中启动,但似乎没有。然后,计时器应每隔一秒(1000 毫秒(运行一次 restoreTimer_Elapsed((。情况似乎也并非如此。

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

ALT Pastebin 链接: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 个月前问这个问题时就想出了这个问题。

无论如何,正如评论中所述,我会说您的问题似乎出在这条线上:

        restoreTimer.Enabled = false;

应该是:

        restoreTimer.Enabled = true;

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