我正在开发一个 Windows Store (C++) 应用程序。这是一种使用 Web 服务从数据库中读取数据的方法。
task<std::wstring> Ternet::GetFromDB(cancellation_token cancellationToken)
{
uriString = ref new String(L"http://myHost:1234/RestServiceImpl.svc/attempt");
auto uri = ref new Windows::Foundation::Uri(Helpers::Trim(uriString));
cancellationTokenSource = cancellation_token_source();
return httpRequest.GetAsync(uri, cancellationTokenSource.get_token()).then([this](task<std::wstring> response)->std::wstring
{
try
{
Windows::UI::Popups::MessageDialog wMsg(ref new String(response.get().c_str()), "success");
wMsg.ShowAsync();
return response.get();
}
catch (const task_canceled&)
{
Windows::UI::Popups::MessageDialog wMsg("Couldn't load content. Check internet connectivity.", "Error");
wMsg.ShowAsync();
std::wstring abc;
return abc;
}
catch (Exception^ ex)
{
Windows::UI::Popups::MessageDialog wMsg("Couldn't load content. Check internet connectivity.", "Error");
wMsg.ShowAsync();
std::wstring abc;
return abc;
}
} , task_continuation_context::use_current());
}
我很困惑如何将接收到的数据返回给调用函数。现在,我在我的数据类的构造函数中调用这个函数,如下所示:
ternet.GetFromDB(cancellationTokenSource.get_token()).then([this](task<std::wstring> response)
{
data = ref new String(response.get().c_str());
});
每当我尝试从 GetFromDB() 接收返回的数据时,都会收到 COM 异常。但是这个运行良好:
ternet.GetFromDB(cancellationTokenSource.get_token());
请提出一种将 GetFromDB 的完成链接到其他代码的更好方法。以及如何从 GetFromDB() 的 try{} 块中获取返回值。请记住,我是异步编程的新手。