使用HttpClient进行异步下载:找不到与此错误代码关联的文本

时间:2015-03-08 06:01:21

标签: windows-phone-8.1 c++-cx windows-rt

我打算使用以下代码下载文件。当WIFI可用时它可以工作;但是当没有Wifi时,我希望能够抓住previousTask.get()中提出的异常。不幸的是,我的代码中的catch似乎没有抓住异常。顺便说一句,例外是HRESULT:0x80072F30 The text associated with this error code could not be found.。我错过了一些例外情况是不可原谅的吗?

auto httpClient = ref new HttpClient();
auto get_operation = httpClient->GetAsync(ref new Uri(url), HttpCompletionOption::ResponseContentRead);
get_operation->Progress = progressHandler;
auto response = create_task(get_operation).then([](task<HttpResponseMessage^> previousTask)
{
    try
    {
        return previousTask.get();
    }
    catch (Exception^ ex)
    {
        // Some how this does not catch
        OutputDebugString(("Exception: " + ex->Message)->Data());
        return (HttpResponseMessage^)nullptr;
    }
}).get();
// At this point, I expect either a fully read response or response=nullptr
// Code to write to file is omitted

编辑:~~我测试了显然使用类似代码的官方微软HttpClient sample。显然,当没有网络连接时,该应用程序会发生同样的崩溃。这种方式证实了缺陷是在操作系统方面,而且没有人能做到这一点。~~

编辑:事实证明我认为异常没有被捕获,因为Visual Studio弹出一个对话框,我认为这意味着实际上异常会崩溃应用程序,即它不是通过VS启动时。我仔细阅读了弹出消息并意识到VS会在每次抛出异常时提示,除非配置不这样做;按对话框上的[继续]按钮转到catch子句。从“开始”菜单启动应用程序没有任何问题。

1 个答案:

答案 0 :(得分:3)

如果从UI线程调用此代码,则从此代码的最后一行删除get()调用。你不能在UI线程中这样做。

否则,在启用飞行模式的情况下,您的代码可以正常工作;正如预期的那样,我在处理程序中捕获异常。例外HResult 0x80072f30MSDN page记录为 ERROR_WINHTTP_NO_CM_CONNECTION