我正在使用Windows应用商店(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());
}
我很困惑如何将接收到的数据返回给调用函数。每当我试图从GetFromDB接收返回的数据()
ternet.GetFromDB(cancellationTokenSource.get_token()).then([this](task<std::wstring> response)
{
data = ref new String(response.get().c_str());
});
我得到一个COM异常:现在,我在我的数据类的这样的构造调用这个函数。但是,这在一个晴朗的运行:
ternet.GetFromDB(cancellationTokenSource.get_token());
请建议链接GetFromDB完成对其他代码的一种更好的方式。然后如何从GetFromDB()的try {}块中获取返回的值。请记住,我是一名非常新的异步编程学生。
同样,实际的异常错误代码会有帮助。 – 2013-04-04 12:26:39
您可以将.get()调用包装在try {/*...*/} catch(Platform :: Exception^e)Platform :: String^s = e-> Message中; }'然后设置一个断点并检查“s”以获取有关异常的其他信息。 – 2013-04-11 22:39:07