我有一个将在周末运行的控制台应用程序。 当我回到工作岗位时,我需要安全地终止它。
它运行循环并通过移动文件和更新数据库来修改文件。
我不能简单地按 Ctrl-Z 退出它,我假设这可能会在处理文件的过程中停止程序?
有没有一种安全的方法让我说按"c"键将我的runLoop
boolean
设置为 false
这样就可以正确退出我的循环,或者有更好的方法吗?
static void Main(string[] args)
{
bool runLoop = true;
while (runLoop)
{
// bunch of code
// moving files, updating database.
}
}
终止此循环并确保当前运行的文件成功完成的安全方法是什么?
您可以轻松地将处理程序添加到向您公开的事件中,以便在按下该命令时使用它来发出取消信号:
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();
请注意,当该事件处理程序完成时,整个过程将被终止,因此您还需要确保该事件处理程序保持运行,直到程序的其余部分能够正常完成。