【问题标题】:Timer.Elapsed callback is not being triggeredTimer.Elapsed 回调未被触发
【发布时间】:2014-08-31 08:32:43
【问题描述】:

编辑:我缩短了代码示例

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

计时器应该在 RestoreMana() 方法中启动,但似乎没有。 然后计时器应每隔一秒(1000 毫秒)运行 restoreTimer_Elapsed()。 这似乎也不是这样。

此代码用于 Terraria TShock 插件并使用其中的包,但计时器来自 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();
        }

    }
}

【问题讨论】:

  • 代码太多了。但我认为您从未启用过计时器。
  • @Dirk 只有一次。检查该代码是否曾经执行过。两次*
  • 哦,你也使用 Start 和 Stop。但无论如何,我不会费心阅读所有这些代码。如果您需要帮助,请将其转化为显示问题的较小示例。
  • restoreTimer.Enabled = false;这会禁用计时器。但据我所知,没有什么能实现它。
  • 较小的代码示例是好的,但没有任何方式知道入口点,这仍然不是一个好问题。你可以添加一个示例类来显示这个类的调用,什么有效,什么无效?谢谢

标签: c# plugins timer


【解决方案1】:

注意:我希望你在大约 1 个月前提出这个问题时现在就发现了这个问题。

无论如何,正如 cmets 中所述,我想说您的问题似乎在于这一行:

        restoreTimer.Enabled = false;

应该是:

        restoreTimer.Enabled = true;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2020-08-08
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    相关资源
    最近更新 更多