【问题标题】:SignalR and .Net Maui - Shell.Current.GoToAsync IssueSignalR 和 .Net Maui - Shell.Current.GoToAsync 问题
【发布时间】:2023-01-31 04:39:51
【问题描述】:

我制作了一个 .Net Maui 应用程序,并尝试使用 SignalR 制作它的在线版本。
连接已成功建立,我从服务器得到答复并执行了 Shell.Current.GoToAsync 命令,但页面根本没有改变。
如果我在连接外使用相同的命令,页面会按预期更改。
我认为这是因为它没有在主线程上运行,但是当我从 SignalR 服务器获得正确响应时,我需要导航到另一个页面。
通过调试我可以看到其他页面初始化是从另一个线程执行的。
下面是一个更简单的代码版本,仅显示此问题所需的内容。

[ObservableProperty]
private string connectionID;

[ObservableProperty]
private string word;
    
private HubConnection _connection;

[RelayCommand]
async Task JoinGame()
{
    _connection = new HubConnectionBuilder()
    .WithUrl($"{baseUrl}/Hub")
    .Build();

    _connection.On<string, string, string>("CheckIfConnectionMatchAnswer", async (connectionID, answer, word) =>
    {
        if (ConnectionID == connectionID && answer == "True")
        {
            Word = word;
            await Shell.Current.GoToAsync(nameof(GamePage));
        }
    });
    await _connection.StartAsync();
    await _connection.InvokeCoreAsync("CheckConnectionID", args: new[] { ConnectionID });
}

我希望导航到另一个页面,但那没有发生。

【问题讨论】:

    标签: maui asp.net-core-signalr .net-maui.shell


    【解决方案1】:

    解决方案是使用 MainThread.BeginInvokeOnMainThread(action); 来触发 UI 线程的操作并更新页面。请注意,如果我再次遇到同样的问题,这也适用于更新 UI 元素。

    Microsoft - Run code on the main UI thread .Net Maui

    【讨论】:

      猜你喜欢
      • 2022-11-03
      • 2021-12-06
      • 2021-01-04
      • 1970-01-01
      • 2022-12-19
      • 2023-01-18
      • 2022-11-24
      • 1970-01-01
      • 2022-11-24
      相关资源
      最近更新 更多