You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF客户端SocketIO回调异常:事件触发后需关闭程序才执行

WPF Socket.IO客户端事件回调延迟执行问题

我正在开发WPF客户端-服务器应用,目前使用SocketIOClient库通过WebSocket协议与服务器通信,事件声明代码如下:

private void DeclareGetDataEvents()
{
    _socket.On("UpdateRivalPoints", (data) =>
    {
        RivalPoints++;
    });
    _socket.On("WinGame", (data) =>
    {
        this.IsUserWin = true;
    });
    _socket.On("OnlineFreeUsers", (users) =>
    {
        UsersNames = JsonConvert.DeserializeObject<ObservableCollection<string>>($"[{users.ToString().Trim(new Char[] {'[', ']', '\\'})}]");
    });
    _socket.On("WantedPlay", (rivalName) =>
    {
        IsRequestReceived = true;
        RivalName = rivalName.ToString().Trim(new Char[] { '[', ']', '"' });
        PlayRequestString = $"{RivalName} want to play!";
    });
    _socket.On("StartPlay", (data) =>
    {
        IsGameOnline = true;
        RivalPoints = 0;
        IsUserWin = false;
        App.Current.Dispatcher.Invoke(() =>
        {
            var window = new GameView();
            window.ShowDialog();
        });
    });
    _socket.On("RefusedPlay", (data) =>
    {
        PlayRequestString = $"{RivalName} refused to play against you";
    });
}

现在遇到的问题是:UpdateRivalPoints和WinGame事件内的回调不会在事件到达时立即执行,只有关闭程序后才会触发。

我尝试使用BeginInvoke改写回调,代码如下:

_socket.On("UpdateRivalPoints", async(data) => await App.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send,new                                          
          UpdateRivalPointsDelegate(UpdateRivalPointsMethod)));

但问题仍未解决。

备注:On方法的参数要求为string eventName和Action<SocketIOResponse> callback。


内容的提问来源于stack exchange,提问作者Avi C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:15:47