2016-05-14 3 views
0

Я создаю простой win phone 8.1 приложение, которое использует geofence api и фоновые задачи для управления, когда пользователь вводит/оставляет какую-то область ,
Чтобы зарегистрировать фоновую задачу я реализовать RegisterBackgroundTask метод App классаНевозможно наложить объект типа «System .__ ComObject» на тип «Windows.ApplicationModel.Background.ILocationTriggerFactory

/// <summary> 
    /// Initializes the singleton application object. This is the first line of authored code 
    /// executed, and as such is the logical equivalent of main() or WinMain(). 
    /// </summary> 
    public App() 
    { 
     this.Suspending += this.OnSuspending; 
     this.RegisterBackgroundTask(); 
    } 

    private async void RegisterBackgroundTask() 
    { 
     const string name = "GeofenceBackgroundTask"; 

     if (BackgroundTaskRegistration.AllTasks.Any(task => task.Value.Name == name)) 
     { 
      return; 
     } 

     var loc = await new Geolocator().GetGeopositionAsync(
      TimeSpan.FromMinutes(2), 
      TimeSpan.FromSeconds(5)); //needed to trig user acceptance 

     var backgroundAccessStatus = 
      await BackgroundExecutionManager.RequestAccessAsync(); 

     if (backgroundAccessStatus != BackgroundAccessStatus.Denied) 
     { 
      var geofenceTaskBuilder = new BackgroundTaskBuilder() 
      { 
       Name = name, 
       TaskEntryPoint = "RingtoneManager.Background.GeofenceBackgroundTask" 
      }; 

      geofenceTaskBuilder.SetTrigger(new LocationTrigger(LocationTriggerType.Geofence)); 
      geofenceTaskBuilder.Register(); 
     } 
    } 

И это та часть, которая поднять за исключением new LocationTrigger(LocationTriggerType.Geofence)

Сведения об исключении:

System.InvalidCastException was unhandled by user code 
HResult=-2147467262 
Message=Unable to cast object of type 'System.__ComObject' to type 'Windows.ApplicationModel.Background.ILocationTriggerFactory'. 
Source=mscorlib 
StackTrace: 
    at System.StubHelpers.StubHelpers.GetCOMIPFromRCW_WinRT(Object objSrc, IntPtr pCPCMD, IntPtr& ppTarget) 
    at Windows.ApplicationModel.Background.LocationTrigger..ctor(LocationTriggerType triggerType) 
    at RingtoneManager3.App.<RegisterBackgroundTask>d__2.MoveNext() 

Что у меня есть рисунок до сих пор:

  1. код Исключение составляет 80004002 (E_NOINTERFACE)
  2. Я выяснить, что этот интерфейс и обнаружил, что он объявлен в C:\Program Files (x86)\Windows Phone Kits\8.1\References\CommonConfiguration\Neutral\Windows.winmd и его на самом деле там ildasm window

    И его ссылки из Visual Studio проекта solution references reference properties

  3. Каждые другие триггеры (SystemTrigger, MaintenanceTrigger и т.д.) являются инстанцировании штраф

Что я уже пробовал:

  1. Переустановка VS
  2. Clean/Перестроить решение
  3. метод аннотирования RegisterBackgroundTask с [STAThread]

Это мое первое приложение на Windows Phone и на C#, поэтому я могу делать некоторые глупые ошибки в общем месте. Я также не понимаю, как визуальная студия обрабатывает эти ссылки из решения и как интерфейсы, закодированные в ссылках на файлы .winmd, стали доступны для кода в проекте. Может быть, там что-то пошло не так. Поэтому мне нужна помощь в поиске корня проблемы и поиске решения.

Спасибо заранее

+0

Вы [уже задавала] (http://stackoverflow.com/questions/37043612/new-locationtriggerlocationtriggertype-geofence-fails-with-invalidcastexceptio) этот вопрос. Время для последующего вызова службы поддержки Microsoft. –

+0

Теперь я предоставляю различную информацию под разными углами. Возможно, это будет казаться более распространенным и понятным для кого-то, кто закончил – mshipov

ответ

0

Это может быть, что «LocationTrigger» одноэлементно? (извините, не знаю телефон) и уже был активирован в другом месте с помощью общей системы .__ ComObject RCW. Если это так, его нельзя отличить. Вместо этого попробуйте использовать Activator.CreateInstance.

Type t = Type.GetTypeFromProgID("WhateverTheProgIdIsHere"); 
System.Object obj = Activator.CreateInstance(t); 
ILocationTriggerFactory tf = obj as ILocationTriggerFactory; 
+0

Спасибо за ответ. Телефон HTC 8x. Я попробую это решение, когда это возможно – mshipov

Смежные вопросы

 Смежные вопросы