C# 非托管异常

C# 非托管异常,c#,wpf,.net-4.0,C#,Wpf,.net 4.0,我有一个从后台线程调用非托管库的方法。我在非托管调用周围放置了一个try-catch块,但它从未被捕获。而即时调试器将捕获它。我做错了什么 public bool TurnOn() { var connectionSucceeded = false; try { connectionSucceeded = turnOn(); //Unmanaged call } catch

我有一个从后台线程调用非托管库的方法。我在非托管调用周围放置了一个try-catch块,但它从未被捕获。而即时调试器将捕获它。我做错了什么

    public bool TurnOn()
    {
        var connectionSucceeded = false;
        try
        {
            connectionSucceeded = turnOn(); //Unmanaged call
        }
        catch
        {
            connectionSucceeded = false; //Never reaches this block                
        }

        return connectionSucceeded;
    }

调试器是否设置为在抛出非托管异常时处理这些异常

检查调试>异常中的设置


另外,非托管异常是否一定是直接在被调用的线程上抛出的,而不是在另一个线程上的某个异步操作中抛出的?

我完全同意Stuart的回答。。在这种情况下,您可以尝试在应用程序级别捕获异常:

AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionEventRaised;

请再看看这个答案:

您使用.net 4.0吗?在.net 4.0中,当在3.5中没有时,这个问题可能是。记录您在输出窗口中看到的内容。无论哪种方式,它都应该显示在catch块或UnhandledException事件中。这两者都不行。如果它被抛出到一个新线程上——一个由本机代码创建的线程——那么我认为它不会出现在你的处理程序中。我怎么能捕捉到这样的东西呢?好吧,我不确定你能不能捕捉到——如果它是线程上的一个本机异常,没有任何本机try/catch处理,那么我认为游戏结束了。但首先,有没有办法检查这是否确实是问题所在?例如,本机堆栈跟踪向您显示了什么?什么是本机的“打开”?您是否有pdb/dbg符号或源代码?我没有任何pdb/dbg符号或访问源代码的权限。对不起,让我更清楚一些。该事件确实会触发,只是在非托管异常的情况下不会触发。请查看引用的答案并重试。引用的答案使用winforms方法作为解决方案的一部分,我使用的是wpf