Cri*_*oma 6 c# console multithreading client-server
我正在编写一个通过 TCP 连接到服务器的 C# 控制台应用程序,它使用一个单独的线程来侦听来自服务器的传入消息,我希望它将它们写入控制台,同时从控制台读取消息。我能够做到这一点,但我有一个问题。
当我输入时,控制台会显示此信息,并出现一条消息:
来自服务器的消息 来自服务器的
消息
我的消息从服务器
g 到服务器
我希望它将我的消息与服务器消息分开,如下所示:
来自服务器的
消息 来自服务器的
消息 来自服务器的
消息 我的消息到服务器
如果我收到一条消息,我仍然想保留我输入的消息,但我不希望它与收到的消息混淆,我希望它在最后一行保持完整。
我可以这样做吗?如何?
当来自服务器的消息传入时,我可以将消息移到控制台的末尾吗?
我相信这实际上可以通过标准 .NET Console API 实现,并使用一些技巧。您需要做的是创建一个异步 Read/ReadLine 方法(根据您的帖子判断,我假设您已经完成了)并允许它在新数据到达时立即取消。我假设您现在正在逐行发送输入。“新数据处理程序”的伪代码可能如下所示:
保存当前的输入缓冲区。 取消当前的异步读取。 将光标位置重置到最后一次写入新数据的末尾。 输出新数据。 保存光标位置。 重新启动异步读取事件。
特别是,您需要处理Console.CursorLeft和Console.CursorTop属性。您也许可以通过直接与 Win32 API 控制台函数交互来避免一些黑客行为,但这可能不值得麻烦。
希望有帮助。