一尘不染

该应用程序调用了已编组为不同线程的接口-Windows Store App

c#

因此,首先,我已经阅读了有关此特定问题的大量主题,但我仍然不知道如何解决该问题。基本上,我试图与websocket通信并将接收到的消息存储在绑定到listview的可观察集合中。我知道我从套接字正确地获得了响应,但是当它尝试将其添加到可观察的集合中时,出现以下错误:

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

我已经阅读了有关“调度”的一些信息以及其他一些信息,但是我非常困惑!这是我的代码:

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

    }

这是绑定:

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

在仍然绑定到我的listview的可观察集合的同时,如何使错误消失?


阅读 406

收藏
2020-05-19

共1个答案

一尘不染

这解决了我的问题:

Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
    {
        // Your UI update code goes here!
    }
);

在Windows应用商店应用中获取CoreDispatcher的正确方法

2020-05-19