安全地退出控制台应用程序?

时间:2013-09-24 20:50:49

标签: c# console-application

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

它正在运行一个循环并通过移动它们来修改文件,并更新数据库。

我不能只是简单地按Ctrl-Z退出它我假设因为这可以在处理文件的过程中停止程序?

有没有一种安全的方法可以让我按“c”键将runLoop boolean设置为false,这样就可以正常退出循环或有更好的方法?

static void Main(string[] args)
{
     bool runLoop = true;

     while (runLoop)
     {
          // bunch of code
          // moving files, updating database.
     }
}

什么是终止此循环并确保当前正在运行的文件成功完成的安全方法?

1 个答案:

答案 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();

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