4

私はC#の初心者ですが、Javaをよく使用しています。アプリで次のコードを使用して位置データを取得しようとしています。デバイスでGPSセンサーを使用するためのWindows8デスクトップアプリを作成しています。

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メソッドが必要です。'System'のusingディレクティブがありませんか?C:\ Users \ clidy \ document \ visual studio 2012 \ Projects \ Hello-Location \ Hello-Location \ Form1.cs

どうすればこれを修正できますか?

また、C#の場所とWindowsデスクトップアプリのセンサーAPIに関するリソースを教えていただければ非常に便利です。グーグルすると、WindowsRTAPIしか取得できません。

4

2 に答える 2

3

エラーを修正するには、Bartが質問のコメントの1つで提供したリンクを参照する必要があります。

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 に答える