【发布时间】:2013-12-06 11:49:55
【问题描述】:
这是我的简单 C# 控制台应用程序:
using System.Diagnostics;
using System.Threading;
public static class Program
{
public static int Main(string[] args)
{
var e = new AutoResetEvent(false);
ThreadPool.QueueUserWorkItem(state =>
{
Process.Start("nonexistent path");
e.Set();
});
e.WaitOne();
return 0;
}
}
如果我在调试器中运行这个程序,它会在关机时挂起。如果我用throw new System.Exception(); 替换Process.Start("nonexistent path"); 行(抛出System.ComponentModel.Win32Exception,它不会挂起并且程序按预期终止。
在我看来,.NET/CLR 或调试器必须以某种特殊方式处理 Win32Exception。这是预期的行为吗?
这是在 .NET/CLR 4.0 上运行的,其中工作线程上未处理的异常应该终止应用程序:CLR 2.0 及更高版本 (http://msdn.microsoft.com/en-us/library/ms228965.aspx) 就是这种情况。
更新
到目前为止,当从 Cygwin 终端启动程序时,我只能在 32 位 Windows 操作系统上重现此问题。
【问题讨论】:
-
很奇怪。我刚刚复制了你的代码,代码正常结束
-
您确实从 sn-p 中删除了太多代码,并添加了许多猴子尾巴以混淆真正的问题。 This question 是匹配项。
-
我删除了
@。然而,这是一个功能齐全的代码 sn-p。