-2

我试图编辑这个问题:退出命令行程序的首选方式是什么?

但是我的编辑被拒绝了。我不允许发表评论,因此我会冒着重复问题的风险。

最初的问题是“退出命令行程序的最佳方法是什么”。最好的方法显然是 to returnfrom Main(),但是如果我想从事件处理程序Console.CancelKeyPress或 Timer 中退出怎么办?

像在事件处理程序中一样,从 Main() 退出“远离”的唯一方法是该Environment.Exit()方法吗?它可能不安全,因为Environment.Exit()不会清理。

示例代码:

class Program
{
    static void Main(string[] args)
    {
        Timer t = new Timer(4000);
        t.Elapsed += t_Elapsed;
        t.Start();

        while (true)
        {
            System.Threading.Thread.Sleep(1000);
        }
    }

    static void t_Elapsed(object sender, ElapsedEventArgs e)
    {
        // I want to exit here
    }
}
4

1 回答 1

1

如果你的程序是单线程的,你可以抛出一个自定义异常,并在Main()方法中捕获它。这给了你很多机会来执行任何清理(例如在finally块中)以实现优雅退出。像这样:

public class ExitProgramException : Exception { }

public void SomeNestedStuff()
{
    ...
    if (...) throw new ExitProgramException();
    ...
}

public void Main()
{
    try 
    {
        ...
        SomeNestedStuff();
        ...
    }
    catch (ExitProgramException)
    {
        Console.WriteLine("Bye!");
    }
}

但是,如果您的程序是多线程的,那么您将需要实现一些更复杂的优雅退出机制,具体取决于您的业务逻辑的具体情况。

于 2013-11-14T20:01:09.373 回答