Windows 8 WinRT GetGeopositionAsync在JavaScript中工作,而不是C++?

Windows 8 WinRT GetGeopositionAsync在JavaScript中工作,而不是C++?,windows-8,windows-runtime,microsoft-metro,Windows 8,Windows Runtime,Microsoft Metro,只是好奇这是一个bug还是我做错了。我正在尝试使用WinRT的地理定位器。我有一个Javascript测试Metro应用程序,所有程序都使用以下代码: var locator = Windows.Devices.Geolocation.Geolocator(); var promise = locator.getGeopositionAsync().then( function (pos) { Loc.innerText = "Lat: " + pos.coordina

只是好奇这是一个bug还是我做错了。我正在尝试使用WinRT的地理定位器。我有一个Javascript测试Metro应用程序,所有程序都使用以下代码:

var locator = Windows.Devices.Geolocation.Geolocator();
var promise = locator.getGeopositionAsync().then(
    function (pos) {
        Loc.innerText = "Lat: " +  pos.coordinate.latitude + ", Lng: " + pos.coordinate.longitude;
    });
我试图用C++代码在C++应用程序中做同样的事情,但是它从来没有进入我的lambda:

auto locator = ref new Geolocator();
auto operation = locator->GetGeopositionAsync();
operation->Completed =  ref new AsyncOperationCompletedHandler< Geoposition^ >(
    [=](IAsyncOperation<Geoposition^>^ operation)
    {
        auto result = operation->GetResults(); 
        std::wstringstream ss;
        ss << L"Lat: " << result->Coordinate->Latitude << L", Lng: " << result->Coordinate->Longitude;
        this->Loc->Text = ref new String( ss.str().c_str() );
    });

我在两个应用中都启用了定位功能。有什么建议吗?

你可以用PPL试试。在我的经验中,用C++开发比使用这些处理程序要好得多。
#include <ppl>

Concurrency::task<Geoposition^> getPositionTask(locator->GetGeopositionAsync());
getPositionTask.then([=](IAsyncOperation<Geoposition^>^ operation) {
...

当然,如果您正在开发一个组件,您不能从您的方法返回Concurrency::task对象,但是只要您在代码中,它们可能会更好。

您可以尝试使用PPL。在我的经验中,用C++开发比使用这些处理程序要好得多。
#include <ppl>

Concurrency::task<Geoposition^> getPositionTask(locator->GetGeopositionAsync());
getPositionTask.then([=](IAsyncOperation<Geoposition^>^ operation) {
...

当然,如果您正在开发一个组件,您不能从您的方法返回Concurrency::task对象,但只要您在代码中,它们可能更可取。

,你的操作对象是否包含一个通过It明智的可用的启动方法显示?你是否声明了C++应用程序的位置能力?@ IAIMOMISIVE是:我已经打开了两个应用程序的位置能力。@ Bob Delavan:是的,它有一个启动方法,但我不调用start。我写C++版本时使用的示例也不调用start:如果是这样,我想知道如果调用start作为您提供的代码的最后一行,会使它工作。当前的开发者预览文档将其称为启动位置请求。好奇,你的操作对象是否包含一个通过智能感知的可用的启动方法显示?你是否声明了C++应用程序的位置能力?@ iMaTimeSIS是:我已经打开了两个应用程序的位置能力。@ Bob Delavan:是的,它有一个启动方法,但我不调用start。我写C++版本时使用的示例也不调用start:如果是这样,我想知道如果调用start作为您提供的代码的最后一行,会使它工作。当前的开发者预览文档将其称为启动位置请求。