我在Windows Azure Server 2012 R2 VM上的Windows服务应用程序中发现了非常有趣的行为。我的Windows服务打电话,
ThreadPool.QueueUserWorkItem((_) => DoWork());
在DoWork中,
private static void DoWork()
{
try
{
// Do all work
Environment.Exit(0);
}
catch (Exception ex)
{
Logger.Log(ex);
}
}
对Environment.Exit(0)
的调用导致进程崩溃。没有登录事件查看器,也没有进一步的信息。只需process unexpectedly terminated
。为什么尝试/ catch不在那里工作?这是Windows服务应用程序的预期行为。
答案 0 :(得分:2)
为什么try / catch不能在那里工作?
根据MSDN,
如果从try或finally块调用退出,则任何catch中的代码 块不执行。
@RufusL说你不应该那样关闭你的应用程序。
也许有一种更优雅的方式来关闭你的应用。
也许,也许,召集一个结束事件或者你可以尝试删除Environment.Exit(0)
代码和'让事情成为':D