获取Windows 8桌面应用程序中的位置

时间:2012-10-29 16:32:53

标签: c# windows-8 desktop-application

我是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 \项目\你好-位置\你好-位置\ Form1.cs中

我该如何解决这个问题?

如果您可以为我指向C#位置的某些资源以及Windows 桌面应用的传感器API,这将非常有用。谷歌搜索时,我只获得Windows RT API。

2 个答案:

答案 0 :(得分:3)

要解决您的错误,您必须在其中一个问题的评论中引用Bart提供的link

  

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

     

...

     

该程序集位于C:\ Program Files(x86)\ Reference中   组件\微软\ Framework.NETCore \ V4.5

我最近找到了一个类似问题的“解决方案”:C# desktop application doesn't share my physical location。也许您可能会对我的方法感兴趣:https://stackoverflow.com/a/14645837/674700

这更像是一种解决方法,它不是针对Windows 8,但它最终会起作用。

答案 1 :(得分:2)

alex的解决方案有效! 添加该引用和地理位置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();
}