【发布时间】: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;这会禁用计时器。但据我所知,没有什么能实现它。
-
较小的代码示例是好的,但没有任何方式知道入口点,这仍然不是一个好问题。你可以添加一个示例类来显示这个类的调用,什么有效,什么无效?谢谢