4

我是 C# 的初学者,但我经常使用 Java。我正在尝试在我的应用程序中使用以下代码来获取位置数据。我正在制作一个 Windows 8 桌面应用程序以在我的设备中使用 GPS 传感器:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Devices.Sensors;
using Windows.Devices.Geolocation;
using Windows.Devices.Geolocation.Geoposition;
using Windows.Foundation;

namespace Hello_Location
{
    public partial class Form1 :
    {
        public Form1()
        {
            InitializeComponent();
        }

        async private void Form1_Load(object sender, EventArgs e)
        {
            Geolocator loc = new Geolocator();
            try
            {
                loc.DesiredAccuracy = PositionAccuracy.High;
                Geoposition pos = await loc.GetGeopositionAsync();
                var lat = pos.Coordinate.Latitude;
                var lang = pos.Coordinate.Longitude;
                Console.WriteLine(lat+ " " +lang);
            }
            catch (System.UnauthorizedAccessException)
            {
                // handle error
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {

        }
    }
}

我收到此错误:

'await' 要求类型 'Windows.Foundation.IAsyncOperation' 具有合适的 GetAwaiter 方法。您是否缺少“系统”的使用指令?C:\Users\clidy\documents\visual studio 2012\Projects\Hello-Location\Hello-Location\Form1.cs

我怎样才能解决这个问题?

此外,如果您可以向我指出一些 C# 位置资源和 Windows桌面应用程序的传感器 API,这将非常有用。谷歌搜索后,我只获得了 Windows RT API。

4

2 回答 2

3

要解决您的错误,您必须参考Bart 在问题评论之一中给出的链接。

如果您使用 Windows 运行时事件处理程序等映射类型,您可能还需要添加对 System.Runtime.WindowsRuntime.dll 的引用:

...

该程序集位于 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETCore\v4.5

我最近找到了一个类似问题的“解决方案”: C# 桌面应用程序不共享我的物理位置。也许您可能会对我的方法感兴趣:https ://stackoverflow.com/a/14645837/674700 。

它更像是一种解决方法,它不是针对 Windows 8,但它最终可以工作。

于 2013-02-01T14:28:57.097 回答
2

亚历克斯的解决方案有效!添加该参考和地理定位 api 开始像魅力一样工作!其他传感器的异步方法也是如此!

这是我刚刚开始使用的一个功能。

async public void UseGeoLocation()
{
    Geolocator _GeoLocator = new Geolocator();
    Geoposition _GeoPosition = 
        await _GeoLocator.GetGeopositionAsync();

    Clipboard.Clear();
    Clipboard.SetText("latitude," + 
        _GeoPosition.Coordinate.Latitude.ToString() + 
        "," + "longitude," + _GeoPosition.Coordinate.Longitude.ToString() + 
        "," + "heading," + _GeoPosition.Coordinate.Heading.ToString() +
        "," + "speed," + _GeoPosition.Coordinate.Speed.ToString());

    Application.Exit();
}
于 2013-04-19T19:12:11.197 回答