Я создаю простой 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()
Что у меня есть рисунок до сих пор:
- код Исключение составляет 80004002 (E_NOINTERFACE)
Я выяснить, что этот интерфейс и обнаружил, что он объявлен в
C:\Program Files (x86)\Windows Phone Kits\8.1\References\CommonConfiguration\Neutral\Windows.winmd
и его на самом деле тамИ его ссылки из Visual Studio проекта
- Каждые другие триггеры (SystemTrigger, MaintenanceTrigger и т.д.) являются инстанцировании штраф
Что я уже пробовал:
- Переустановка VS
- Clean/Перестроить решение
- метод аннотирования
RegisterBackgroundTask
с[STAThread]
Это мое первое приложение на Windows Phone и на C#, поэтому я могу делать некоторые глупые ошибки в общем месте. Я также не понимаю, как визуальная студия обрабатывает эти ссылки из решения и как интерфейсы, закодированные в ссылках на файлы .winmd, стали доступны для кода в проекте. Может быть, там что-то пошло не так. Поэтому мне нужна помощь в поиске корня проблемы и поиске решения.
Спасибо заранее
Вы [уже задавала] (http://stackoverflow.com/questions/37043612/new-locationtriggerlocationtriggertype-geofence-fails-with-invalidcastexceptio) этот вопрос. Время для последующего вызова службы поддержки Microsoft. –
Теперь я предоставляю различную информацию под разными углами. Возможно, это будет казаться более распространенным и понятным для кого-то, кто закончил – mshipov