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

MAUI界面创建后后台线程未正常运行问题求助

问题分析与解决方案

核心问题

你的代码存在三个关键问题,导致WebSocket连接无法正常维持:

  1. 未发起连接请求:创建WebSocket实例后,没有调用Connect()方法触发连接动作。
  2. 实例被立即释放:使用using块包裹WebSocket,方法执行完毕后实例被自动销毁,连接无法持续。
  3. 线程立即终止:后台线程执行完OpenWebSocketConnection方法后直接结束,没有维持连接所需的阻塞逻辑。

修改后的代码

WebSocketConnection.cs

using Newtonsoft.Json;
using WebSocketSharp;

namespace MauiWebSocketTest
{
    public class WebSocketConnection
    {
        private WebSocket _ws;

        public void OpenWebSocketConnection()
        {
            _ws = new WebSocket("ws://82.165.185.245:8081/deephub/v1/ws/socket");
            
            _ws.OnOpen += (sender, e) => 
            {
                Console.WriteLine("WebSocket连接已打开");
                _ws.Send(JsonConvert.SerializeObject(new FenceEvents()));
            };

            _ws.OnMessage += (sender, e) => 
            {
                Console.WriteLine($"收到消息: {e.Data}");
            };

            _ws.OnError += (sender, e) =>
            {
                Console.WriteLine($"WebSocket错误: {e.Message}");
            };

            _ws.OnClose += (sender, e) =>
            {
                Console.WriteLine($"WebSocket已关闭: {e.Reason}");
            };

            // 阻塞线程直到连接关闭,维持连接存活
            _ws.Connect();
        }

        // 应用退出时关闭连接
        public void CloseConnection()
        {
            _ws?.Close();
        }
    }
}

App.xaml.cs

namespace MauiWebSocketTest;
public partial class App : Application
{
    private WebSocketConnection _webSocket;

    public App()
    {
        InitializeComponent();

        _webSocket = new WebSocketConnection();
        Thread t = new Thread(_webSocket.OpenWebSocketConnection);
        t.IsBackground = true; // 设置为后台线程,不阻塞应用退出
        t.Start();

        MainPage = new AppShell();
    }

    protected override void OnTerminating()
    {
        _webSocket?.CloseConnection();
        base.OnTerminating();
    }
}

关键修改说明

  • 移除using块,将WebSocket设为类成员变量,避免实例被提前回收。
  • 添加_ws.Connect()调用,发起WebSocket连接请求,该方法会阻塞线程直到连接关闭,维持后台线程存活。
  • 新增OnError和OnClose事件,方便排查连接异常问题。
  • 将WebSocketConnection实例设为App类的成员变量,防止被GC回收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:23:17