我正在编写一个控制台应用程序,作为一个计划的任务运行,当您使用“关闭”按钮关闭它时,它似乎不会执行运行代码的最后一个块。我尝试用以下非常简单的控制台应用程序复制这种行为:
using System;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
Thread.Sleep(60000);
}
finally
{
Console.WriteLine("Finally");
}
}
}
}当运行调试器时,不会碰到Console.WriteLine行上的断点。我不确定这个简单的测试是否按照预期工作,或者为什么在这个测试或我的生产代码中都没有运行finally块。
我以为最后的阻塞总是跑(这不是他们的全部重点吗?)这里发生什么事情?
发布于 2011-07-25 08:17:14
除非进程本身突然终止,否则最终块总是会运行--这就是这里所发生的情况。这并不像Thread.Sleep抛出一个异常,堆栈正在优雅地展开--整个进程只是被中止。至少据我所知:)
发布于 2011-07-25 08:40:04
原来我需要做的是从这个答案中复制代码:Capture console exit C#
https://stackoverflow.com/questions/6813306
复制相似问题