我有一个将在周末运行的控制台应用程序。当我重新开始工作时,我需要安全地终止它。
它正在运行一个循环并通过移动它们来修改文件,并更新数据库。
我不能只是简单地按Ctrl-Z退出它我假设因为这可以在处理文件的过程中停止程序?
有没有一种安全的方法可以让我按“c”键将runLoop
boolean
设置为false
,这样就可以正常退出循环或有更好的方法?
static void Main(string[] args)
{
bool runLoop = true;
while (runLoop)
{
// bunch of code
// moving files, updating database.
}
}
什么是终止此循环并确保当前正在运行的文件成功完成的安全方法?
答案 0 :(得分:4)
您可以轻松地向处理此事件的事件添加处理程序,以便在按下该命令时使用它来表示取消:
bool runLoop = true;
ManualResetEvent allDoneEvent = new ManualResetEvent(false);
Console.CancelKeyPress += (s, e) =>
{
runLoop = false;
allDoneEvent.WaitOne();
};
int i = 0;
while (runLoop)
{
Console.WriteLine(i++);
Thread.Sleep(1000); //placeholder for real work
}
//for debugging purposes only
Console.WriteLine();
Console.WriteLine("press any key to exit . . .");
Console.ReadKey(true);
allDoneEvent.Set();
请注意,当该事件处理程序完成时,整个进程将被终止,因此您还需要确保该事件处理程序保持运行,直到该程序的其余部分能够正常结束。