1

我正在开发一个 Windows 8 应用程序 (C++)。我使用了 Windows 8 示例集合中的 httpclient 类。

inline void CheckHResult(HRESULT hResult)
{
    if (hResult == E_ABORT)
    {
        concurrency::cancel_current_task();
    }
    else if (FAILED(hResult))
    {
        throw Platform::Exception::CreateException(hResult);
    }
}

当应用程序未连接到互联网时,此函数会引发异常。我试图像这样在下面的 lambda 中捕获异常。

return completionTask.then([this, stringCallback](tuple<HRESULT, wstring> resultTuple)
{
    try
    {
        CheckHResult(std::get<0>(resultTuple));
    }

    catch(Exception^ ex)
    {

    }

    return std::get<1>(resultTuple);
}); 

但它仍然显示一个未处理的异常:

First-chance exception at 0x77194B32 in Sample.exe: Microsoft C++ exception: Platform::COMException ^ at memory location 0x08C7EDF4. HRESULT:0x800C0005
If there is a handler for this exception, the program may be safely continued.

有什么我做错了吗?

4

1 回答 1

2

第一次机会异常并不一定表示您的代码有问题,它与未捕获异常不同

这篇(旧的,但仍然正确的)文章描述了第一次机会异常的真正含义,只是向调试器发出异常已引发的通知,无论以后是否会被捕获。

调试应用程序时,只要遇到异常,调试器就会收到通知。此时,应用程序被挂起,调试器决定如何处理异常。第一次通过这种机制称为“第一次机会”异常。根据调试器的配置,它要么恢复应用程序并传递异常,要么将应用程序挂起并进入调试模式。如果应用程序处理了异常,它会继续正常运行。

于 2013-04-07T07:17:29.710 回答