我有以下代码,这是否会运行无限循环? 我试图每分钟安排一些事情,控制台应用程序应该持续运行,直到我关闭它。
class Program
{
static int curMin;
static int lastMinute = DateTime.Now.AddMinutes(-1).Minutes;
static void Main(string[] args)
{
// Not sure about this line if it will run continuously every minute??
System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(TimCallBack), null, 1000, 60000);
Console.Read();
timer.Dispose();
}
private static void TimCallBack(object o)
{
curMin = DateTime.Now.Minute;
if (lastMinute < curMin)
{
// Do my work every minute
lastMinute = curMin;
}
}
}
答案 0 :(得分:10)
KISS - 或者您正在争夺Rube Goldberg奖励? ; - )
static void Main(string[] args)
{
while(true)
{
DoSomething();
if(Console.KeyAvailable)
{
break;
}
System.Threading.Thread.Sleep(60000);
}
}
答案 1 :(得分:2)
我认为您的方法应该可以正常运行,假设您没有按下控制台窗口上的任何键。上面的答案肯定会奏效,但不是最漂亮的。
答案 2 :(得分:1)
只要你的main()
退出,所有其他线程也会自动关闭。
答案 3 :(得分:1)
如果需要一直运行,创建服务可能是更好的解决方案吗? Example here
答案 4 :(得分:1)
为什么不将您的应用程序添加到Windows任务计划程序中,并且每次启动控制台应用程序时只执行一个“任务”(并且不要考虑自己安排计划?)
并回答你的问题:没有你的样本没有“循环”,它是事件驱动的,并将在按键时关闭。
答案 5 :(得分:-1)
使用超时停止的事件可能会起作用,如下所示:
class Program
{
static TimeSpan _timeSpan = new TimeSpan(0, 0, 5);
static ManualResetEvent _stop = new ManualResetEvent(false);
static void Main(string[] args)
{
Console.TreatControlCAsInput = false;
Console.CancelKeyPress += delegate (object sender, ConsoleCancelEventArgs e)
{
_stop.Set();
e.Cancel = true;
};
while (!_stop.WaitOne(_timeSpan))
{
Console.WriteLine("Waiting...");
}
Console.WriteLine("Done.");
}
}