Исключение из HRESULT: 0x8001010E (RPC_E_WRONG_THREAD) с использованием пин-кода mapui
Я на самом деле использую Mapsui Nugget для использования карты в моем приложении. Итак, я создаю страницу:
<ContentPage.Content>
<mapsui:MapView Content="{Binding MapView}">
</mapsui:MapView>
</ContentPage.Content>`
Используя шаблон MVVM, есть моя ViewModel:
public CartoGlobalPageViewModel()
{
Title = "Cartographie";
MapView =
Xamarin.Forms.DependencyService.Get<ICartographie().GenerateMap();
}
Как видите, я использую инъекцию зависимостей Xamarin.
Это отлично работает, есть мой GenerateMap
метод:
public MapView GenerateMap()
{
m = new MapView();
IGNConfig.LicenceKey = "aKey";
IGNConfig.Credential = new System.Net.NetworkCredential("Login", "password");
MapsuiIGNDataProvider ignDataProvider = MapsuiIGNDataProvider.Instance;
m.Map.Layers.Add(ignDataProvider.CreateTileLayer());
//var layer = GenerateIconLayer();
//m.Map.Layers.Add(layer);
//IGNMapLayer _MapLayer = new IGNMapLayer();
//ignDataProvider.MapLayer = _MapLayer;
//ignDataProvider.Zoom = 12;
m.MapClicked += CreatePin;
return m;
}
На самом деле моя карта выглядит отлично, но когда я не хочу ставить булавку на мою карту (которая создается событием MapCliked с CreatePin
функция).
Есть функция:
`public void CreatePin(object sender, MapClickedEventArgs e)
{
m.Pins.Add(new Pin(m)
{
Position = new Position(0, 0),
Type = PinType.Pin,
Label = "Zero point",
Address = "Zero point",
});
}`
И теперь, когда я нажимаю один раз, появляется значок, но если я нажимаю в другой раз, я получаю эту ошибку:
System.Exception HResult=0x8001010E Message=L’application a appelé une
interface qui était maintenue en ordre pour un thread différent.
(Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))
Source=Windows Arborescence des appels de procédure :
à Windows.UI.Xaml.Application.get_Resources()
à Xamarin.Forms.Platform.UWP.FontExtensions.GetFontSize(NamedSize size)
Xamarin.Forms.Platform.UWP.WindowsBasePlatformServices.GetNamedSize(NamedSize size, Type targetElementType, Boolean useOldSizes)
à Xamarin.Forms.Label.Xamarin.Forms.Internals.IFontElement.FontSizeDefaultValue
Creator()
à Xamarin.Forms.FontElement.FontSizeDefaultValueCreator(BindableObject
bindable)
à Xamarin.Forms.BindableObject.CreateAndAddContext(BindableProperty
property)
à Xamarin.Forms.BindableObject.GetValues(BindableProperty property0,
BindableProperty property1)
à Xamarin.Forms.FontElement.OnFontFamilyChanged(BindableObject bindable,
Object oldValue, Object newValue)
à Xamarin.Forms.BindableObject.SetValueActual(BindableProperty property,
BindablePropertyContext context, Object value, Boolean currentlyApplying,
SetValueFlags attributes, Boolean silent)
à Xamarin.Forms.BindableObject.SetValueCore(BindableProperty property,
Object value, SetValueFlags attributes, SetValuePrivateFlags
privateAttributes)
à Xamarin.Forms.BindableObject.SetValue(BindableProperty property, Object
value, Boolean fromStyle, Boolean checkAccess)
à Mapsui.UI.Objects.Callout..ctor(MapControl mapControl) à
Mapsui.UI.Forms.MapView.CreateCallout(Position position)
à Mapsui.UI.Forms.Pin.get_Callout() à
Mapsui.UI.Forms.MapView.HandlerTap(Object sender, TappedEventArgs e)
à Mapsui.UI.Forms.MapControl.OnSingleTapped(Point screenPosition)
à Mapsui.UI.Forms.MapControl.<>c__DisplayClass37_0.<OnTouch>b__5(Object
l)
à System.Threading.TimerQueueTimer.<>c.<.cctor>b__22_0(Object state)
à System.Threading.ExecutionContext.RunInternal(ExecutionContext
executionContext, ContextCallback callback, Object state)
à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
à System.Threading.ExecutionContext.RunInternal(ExecutionContext
executionContext, ContextCallback callback, Object state)
à System.Threading.TimerQueueTimer.CallCallback()
à System.Threading.TimerQueueTimer.Fire()
à System.Threading.TimerQueue.FireNextTimers()
à System.Threading.TimerQueue.AppDomainTimerCallback(Int32 id)
Я уже пробовал все это решения:
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher
.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
// Your UI update code goes here!
}
);
_____________
Application.Current.Dispatcher.Invoke((Action)(() => myCode));
_____________
await Windows.ApplicationModel.Core.CoreApplication
.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
// Your UI update code goes here!
}
).AsTask();
_____________
Xamarin.Forms.Device.BeginInvokeOnMainThread(() =>
{
m.Pins.Add(new Pin(m)
{
Position = new Position(0, 0),
Type = PinType.Pin,
Label = "Zero point",
Address = "Zero point",
});
});
Надеюсь, вы можете помочь мне, спасибо