2013-04-07 78 views
1

我正在使用Windows 8应用程序(C++)。我使用了Windows 8样本集合中的httpclient类。如何捕捉异常[C++/CX]

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. 

有什么我做错了吗?

回答

2

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

This (oldish, but still correct) article描述了什么是第一次机会异常,只是通知调试器发生了异常,是否会晚一些被发现。

当应用程序正在调试,每当遇到了异常此时调试器得到通知,暂停应用程序和调试器决定如何处理异常。 第一次通过这种机制被称为“第一次机会”例外。根据调试器的配置,它将恢复应用程序并传递例外,否则将使应用程序暂停并进入调试模式。 如果应用程序处理异常,它将继续正常运行。

+0

非常感谢您的帮助。学习像你这样的知识渊博的人是很好的:) – 2013-04-07 12:09:03