

新闻资讯
技术学院Avalonia 支持标准 .NET 网络编程,需解耦网络逻辑与 UI 线程:TCP 用 TcpClient.ConnectAsync/ReadAsync/WriteAsync 并封装为服务类;UDP 用 UdpClient.SendAsync/ReceiveAsync 配合独立任务;所有 UI 更新必须通过 Dispatcher.UIThread.InvokeAsync。
Avalonia 本身不提供网络通信的专用控件或封装,但它是基于 .NET 的跨平台 UI 框架,完全支持使用标准 .NET 的 System.Net.Sockets(如 TcpClient、UdpClient、Socket 类)进行 TCP/UDP 编程。关键在于:把网络逻辑和 UI 线程解耦,避免阻塞界面。
适合点对点连接、可靠传输场景(如与设备、服务端通信)。注意不能在 UI 线程中直接调用 Connect 或 Read 这类同步阻塞方法。
await client.ConnectAsync(ip, port) 替代 Connect()
NetworkStream 配合 ReadAsync/WriteAsync
TcpService),通过事件或 IAsyncRelayCommand 触发Application.Current.Dispatcher.UIThread.InvokeAsync(() => { /* 更新控件 */ })
适合广播、低延迟、容忍丢包的场景(如局域网设备发现、实时状态上报)。
UdpClient 默认是同步 API,但可配合 Task.Run 或 ReceiveAsync(.NET 6+)避免卡主线程await client.SendAsync(
data, data.Length, endPoint)
await client.ReceiveAsync(),并在单独任务中运行(不要用 BeginReceive 等过时模式)所有网络回调(包括 async void 方法、Timer 回调、事件处理器)默认不在 UI 线程执行,直接访问 TextBox.Text 会抛异常。
Dispatcher.UIThread.InvokeAsync 包裹 UI 操作ObservableCollection 记录日志,View 绑定显示;添加项时仍需确保在 UI 线程调用 Add()
myTextBox),保持关注点分离实际项目中建议按以下方式组织,提升健壮性和可维护性:
IDisposable,用 CancellationTokenSource 支持主动断开try/catch,捕获 SocketException、ObjectDisposedException 等常见异常WeakEventManager 或手动解注册事件,防止内存泄漏(尤其长生命周期 ViewModel 监听短生命周期网络对象)UdpClient.EnableBroadcast = true 或设置 TcpClient.NoDelay = true 观察行为