2014-08-31 93 views
-2

编辑:我缩短了代码示例Timer.Elapsed回调未被触发

我在C#中编码,试图设置一个计时器。 我以前做过,但这次完全没有工作。 我已经浏览过无数次,找不到最新的错误! 请帮忙!

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

此代码适用于Terraria TShock插件并使用它的软件包,但计时器来自System.Timers。所以任何人都可以请帮忙? :D 谢谢!

ALT引擎收录链接: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(); 
     } 

    } 
} 
+6

方式太多的代码。但我想你从来没有启用你的计时器。 – Dirk 2014-08-31 08:35:20

+0

@Dirk只有一次。检查代码是否执行。两次* – SimpleVar 2014-08-31 08:37:53

+1

哦,你也可以使用Start和Stop。但无论如何,我不会去阅读所有的代码。如果您需要帮助,请将其转换为显示问题的较小示例。 – Dirk 2014-08-31 08:40:12

回答

0

NB:我希望你现在想通这个问题,你问这个大约一个月前。

无论如何,在评论中说,我会说你的问题似乎在于在这条线:

 restoreTimer.Enabled = false; 

而应是:

 restoreTimer.Enabled = true; 

...除非您设置这个布尔值在你调用restoreTimer.Start()之前的其他地方。