WinRT GetGeopositionAsync работает в JavaScript, а не в C ++? - PullRequest
2 голосов
/ 24 февраля 2012

Просто любопытно, если это ошибка или я делаю это неправильно.Я пытаюсь использовать Geolocator от WinRT.У меня есть тестовое приложение Metro на Javascript, и все работает с этим кодом:

var locator = Windows.Devices.Geolocation.Geolocator();
var promise = locator.getGeopositionAsync().then(
    function (pos) {
        Loc.innerText = "Lat: " +  pos.coordinate.latitude + ", Lng: " + pos.coordinate.longitude;
    });

Я пытаюсь сделать то же самое в приложении C ++ с этим кодом, но оно никогда не входит в мою лямбду:

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() );
    });

Я включил функцию определения местоположения в обоих приложениях.Есть предложения?

1 Ответ

0 голосов
/ 12 ноября 2012

Вы можете попробовать, используя PPL. По моему опыту, с C ++ гораздо приятнее разрабатывать, чем использовать эти обработчики.

#include <ppl>

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

Конечно, если вы разрабатываете компонент, вы не можете возвращать объекты Concurrency :: task из ваших методов, но пока вы находитесь внутри кода, они, вероятно, предпочтительнее.

...