Windows Phone 8:用于获取在模拟器中运行的方向但在设备中引发异常的代码

时间:2014-06-11 06:41:28

标签: c# windows-phone-7 windows-phone-8 event-handling windows-phone

我一直在编写一个片段来获取Windows Phone 8中两个GeoCoordinates之间的方向。特定代码在Emaulator中正常运行但是当我在Device中部署并测试它时,它正在抛出'System.Reflection.TargetInvocationException'。在我的appmanifest中启用了ID_CAP_MAP和ID_CAP_LOCATION。以下是我正在使用的代码段

private void RequestDirections()
        {
            rq.QueryCompleted += routeQuery_QueryCompleted;

            if (!rq.IsBusy)
            {
                List<GeoCoordinate> routeCoordinates = new List<GeoCoordinate>();
                routeCoordinates.Add(new GeoCoordinate(48.860339, 2.337599));
                routeCoordinates.Add(new GeoCoordinate(48.8583, 2.2945));

                rq.Waypoints = routeCoordinates;
                rq.QueryAsync();

                map.Center = new GeoCoordinate(48.8583, 2.2945); //Center map on last coordinates
            }
        }

        private void routeQuery_QueryCompleted(object sender, QueryCompletedEventArgs<Route> e)
        {
            try
            {
                if (e != null)
                {
                    Route theRoute = e.Result;
                    MapRoute calculatedMapRoute = new MapRoute(theRoute);
                    map.ZoomLevel = 17;
                    map.AddRoute(calculatedMapRoute);

                    //Used Only For Direction List Button

                    sb.AppendLine("Distance to destination: " + e.Result.LengthInMeters);
                    sb.AppendLine("Time to destination: " + e.Result.EstimatedDuration);
                    foreach (var maneuver in e.Result.Legs.SelectMany(l => l.Maneuvers))
                    {
                        sb.AppendLine("At " + maneuver.StartGeoCoordinate + " " +
                                                maneuver.InstructionKind + ": " +
                                                maneuver.InstructionText + " for " +
                                                maneuver.LengthInMeters + " meters");
                    }
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }

我得到的错误是routeQuery_QueryCompleted方法。 QueryCompletedEventArgs<Route> e被抛出为null。确切错误"'e.Result' threw an exception of type 'System.Reflection.TargetInvocationException'"

如果有人能建议如何解决这个问题,那将会很棒。

2 个答案:

答案 0 :(得分:0)

TargetInvocation只是意味着某些东西正在调用反射Invoke,并且被调用的方法引发了异常。真正的问题是隐藏在.InnerException中。所以你应该捕获异常并检查.InnerException以查看实际出错的地方。另请查看.StackTrace。 .InnerException以查看它出错的地方。

答案 1 :(得分:0)

您可以使用GeoCoordinateWatcher

Windows Phone API有一个GeoCoordinateWatcher类,用于触发PositionChanged事件,该事件可用于跟踪用户的位置。通过MapPolyLine可以很容易地在地图上呈现用户的移动,geocoordinates是根据{{1}}定义的线路径。

This文章介绍了如何使用Windows Phone 8创建运行跟踪器应用