wpf UI线程块在www.example.com事件上socket.io

brvekthn  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(200)

我正在开发wpf游戏,通过WebSocket协议连接到nodejs服务器。现在,事件工作正常,直到游戏开始,然后开事件不工作。例如,如果我从服务器发送事件到客户端,而客户端在主窗口,事件工作没有任何问题,但如果我发送相同的事件,而用户在游戏窗口,回调事件没有启动。
如果我在回调事件上设置断点,则只有当我关闭窗口(按下X)时,程序才会在断点处停止。
这就是我声明On事件的方式:

_socket.On("UpdateRivalPoints", (respone) =>
            {
                App.Current.Dispatcher.Invoke(() => RivalPoints++);
            });
5f0d552i

5f0d552i1#

问题似乎与WPF调度程序有关,当游戏窗口处于活动状态时,WPF调度程序可能无法运行事件回调。要解决此问题,您可以尝试以下操作:
使用Dispatcher.BeginInvoke方法而不是Invoke。将事件回调内的代码 Package 在try-catch块中,以处理可能发生的任何异常。在运行事件回调之前,请检查游戏窗口是否仍处于打开状态。示例:

_socket.On("UpdateRivalPoints", (response) =>
 {
     try
     {
         if (App.Current.MainWindow.IsVisible)
         {
             App.Current.Dispatcher.BeginInvoke(() => RivalPoints++);
         }
     }
     catch (Exception ex)
     {
         // handle exception
     }
 });

相关问题