簡體   English   中英

為什么在.NET線程池中引發Win32Exception會導致應用程序在調試器下掛起?

[英]Why does Win32Exception thrown in .NET thread pool cause application hang under a debugger?

這是我簡單的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;
    }
}

如果我在調試器中運行該程序,它將在關機時掛起。 如果我替換行Process.Start("nonexistent path"); (它將引發System.ComponentModel.Win32Exceptionthrow new System.Exception();它不會掛起,並且程序會按預期終止。

在我看來,.NET / CLR或調試器必須以某種特殊方式處理Win32Exception 這是預期的行為嗎?

這是在.NET / CLR 4.0上運行的,其中工作線程上的未處理異常會終止應用程序:CLR 2.0及更高版本就是這種情況( http://msdn.microsoft.com/zh-cn/library/ms228965.aspx ) 。

更新

到目前為止,從Cygwin終端啟動程序時,我只能在32位Windows操作系統上重現此問題。

還有另一個問題:創建的ManualResetEvent未設置。 因為后台線程在設置ManualResetEvent之前失敗,所以主線程被卡在@ event.WaitOne()語句上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM