【问题标题】:TCP based chat application in WPF | C#WPF 中基于 TCP 的聊天应用程序 | C#
【发布时间】:2023-01-20 20:01:11
【问题描述】:

我正在构建一个基于 TCP 连接的聊天应用程序。 它们基本上是两个应用程序(一个是服务器,另一个是客户端)。

在客户端应用程序上(成功连接到服务器后),每当我在文本框中键入一条消息并发送它(它成功发生)但问题出在接收端,因为当我运行一个线程来连续检查流时( NetworkStream 对象)应用程序,即客户端冻结。同时我将无法发送消息,

在 WPF 方面,我在发送按钮上创建了句柄单击事件。(工作正常)

还有另一个绑定到 ObservableCollection 的列表框,它通知 UI 集合中的任何更改。但是当我添加连续检查 NetworkStream 以接收消息的线程时,UI 会挂起,直到服务器关闭。

我希望应用程序在接收和发送消息时不会冻结。

【问题讨论】:

    标签: c# wpf multithreading tcp


    【解决方案1】:

    我认为您需要在客户端和服务器端实现异步调用。

    在客户端,您可以使用 async/await 模式对服务器进行异步调用以发送消息。在等待服务器响应时不应阻塞 UI。

    在服务器端,我相信您需要使用异步套接字操作来接受传入连接和接收数据。 (您可以使用 Socket 类的 BeginAccept 和 BeginReceive 方法来执行此操作)

    Dispatcher.Invoke(或 BeginInvoke)方法使用收到的消息更新 UI。这将确保 UI 更新在 UI 线程上完成并且 UI 不会冻结。

    希望这可以帮助!

    【讨论】:

    • 如果您不在 ui 线程上,则可以使用 Dispatcher.InvokeAsync。但他为什么不呢?
    猜你喜欢
    • 1970-01-01
    • 2016-10-02
    • 2013-10-04
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2018-12-11
    • 2014-02-08
    相关资源
    最近更新 更多