我正试图在15分钟到0秒之间制作一个“简单”的计时器。我用了15秒就用了900秒。当我运行该程序时,它运行良好,但继续进入否定。我仍然是C#的新手。我希望代码停在0并运行警报以引起别人的注意。这是我到目前为止所拥有的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
namespace GBS_GI_Timer
{
public class Program
{
public static int t = 2;
public static void Main()
{
System.Timers.Timer aTimer = new System.Timers.Timer();
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = 1000;
aTimer.Enabled = true;
//Console.WriteLine("Press the Enter key to exit the program.");
Console.ReadLine();
//GC.KeepAlive(aTimer);
if (t == 0)
aTimer.Stop();
}
public static void OnTimedEvent(object source, ElapsedEventArgs e)
{
//TimeSpan timeRemaining = TimeSpan.FromSeconds(t);
Console.WriteLine("Time remianing..{0}", t);
t--;
if (t == 0)
{
Console.WriteLine("\a");
Console.WriteLine("Time to check their vitals, again!");
Console.WriteLine("Press any key to exit...");
}
// Console.ReadKey();
Console.ReadLine();
}
}
}
答案 0 :(得分:3)
你已经对它进行了编码,这样当你点击输入(或输入内容并点击回车)时,它会检查t并可能会停止计时器。您正在检查t == 0,然后才停止计时器。如果在你输入之前t小于零会发生什么?
答案 1 :(得分:1)
你必须重构你的代码以使其工作,System.Timers.Timer使用ThreadPool来运行回调例程。
class Program
{
public static int t = 2;
static System.Timers.Timer aTimer = new System.Timers.Timer();
public static void Main()
{
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = 1000;
aTimer.Enabled = true;
Console.ReadLine();
}
public static void OnTimedEvent(object source, ElapsedEventArgs e)
{
Console.WriteLine("Time remianing..{0}", t);
t--;
if (t == 0)
{
Console.WriteLine("\a");
Console.WriteLine("Time to check their vitals, again!");
Console.WriteLine("Press any key to exit...");
aTimer.Stop();
Console.ReadLine();
}
}
}
答案 2 :(得分:0)
您的程序存在一些其他逻辑问题,但我不确定即使它正在运行也会执行您想要的操作。
我会重构你的OnTimedEvent来做
Console.WriteLine(string.Format("{0} time to check their vitals!"));
并使用while循环检查主程序中t的状态。
您还可以在进入处理程序时更改Timer.Interval,以便在确认第一个事件之前不会触发其他事件,但是您无法保证此例程运行15分钟......