Aplikacja wywołała interfejs, który został przygotowany dla innego wątku - aplikacji Windows Store

Dlatego najpierw przeczytałem mnóstwo wątków na ten konkretny problem i nadal nie rozumiem, jak to naprawić. Zasadniczo próbuję komunikować się z serwerem internetowym i przechowywać otrzymaną wiadomość w obserwowalnej kolekcji powiązanej z listview. Wiem, że poprawnie otrzymuję odpowiedź z gniazda, ale gdy próbuje dodać ją do kolekcji obserwowalnej, pojawia się następujący błąd:

The application called an interface that was marshalled for a different thread. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))

Przeczytałem kilka informacji na temat „wysyłki”, a także kilku innych rzeczy, ale jestem po prostu bardzo zdezorientowany! Oto mój kod:

public ObservableCollection<string> messageList  { get; set; }
private void MessageReceived(MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args)
    {
        string read = "";
        try
        {
            using (DataReader reader = args.GetDataReader())
            {
                reader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
                read = reader.ReadString(reader.UnconsumedBufferLength);
            }
        }
        catch (Exception ex) // For debugging
        {
            WebErrorStatus status = WebSocketError.GetStatus(ex.GetBaseException().HResult);
            // Add your specific error-handling code here.
        }


        if (read != "")
           messageList.Add(read); // this is where I get the error

    }

I to jest wiążące:

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
    //await Authenticate();
    Gameboard.DataContext = Game.GameDetails.Singleton;
    lstHighScores.ItemsSource = sendInfo.messageList;
}

Jak sprawić, by błąd zniknął, jednocześnie wiążąc się z kolekcją obserwowalną dla mojego widoku listy?

questionAnswers(3)

yourAnswerToTheQuestion