2014-08-31 97 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()之前的其他地方。