2

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

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

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

有没有一种安全的方法可以让我说按“c”键将我设置runLoop booleanfalse这样才能正确退出我的循环,或者有更好的方法吗?

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

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

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

4

1 回答 1

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

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

于 2013-09-24T20:53:45.470 回答