2013-04-07 79 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