安全退出控制台应用程序



我有一个将在周末运行的控制台应用程序。 当我回到工作岗位时,我需要安全地终止它。

它运行循环并通过移动文件和更新数据库来修改文件。

我不能简单地按 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();
请注意,当该事件处理程序完成

时,整个过程将被终止,因此您还需要确保该事件处理程序保持运行,直到程序的其余部分能够正常完成。

最新更新