Исключение из 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",
    });
    });

Надеюсь, вы можете помочь мне, спасибо

0 ответов

Другие вопросы по тегам