gpt4 book ai didi

c# - NetworkStream 开始读取/结束读取

转载 作者:可可西里 更新时间:2023-11-01 02:52:58 36 4
gpt4 key购买 nike

我是 C# 编程的新手,我正在开发基于 TcpClient 的应用程序。

我想知道如何使用 BeginRead 和 EndRead,我已经阅读了 MSN 文档但没有帮助。

我有这个:

    private void Send()
{
TcpClient _client = new TcpClient("host", 80);
NetworkStream ns = _client.GetStream();
ns.Flush();
/ ...
ns.Write(buffer, 0, buffer.Length);

int BUFFER_SIZE = 1024;
byte[] received = new byte[BUFFER_SIZE];
ns.BeginRead(received, 0, 0, new AsyncCallback(OnBeginRead), ns);
}

private void OnBeginRead(IAsyncResult ar)
{
NetworkStream ns = (NetworkStream)ar.AsyncState;
int BUFFER_SIZE = 1024;
byte[] received = new byte[BUFFER_SIZE];
string result = String.Empty;

ns.EndRead(ar);

int read;
while (ns.DataAvailable)
{
read = ns.Read(received, 0, BUFFER_SIZE);
result += Encoding.ASCII.GetString(received);
received = new byte[BUFFER_SIZE];
}
result = result.Trim(new char[] { '\0' });
// Want to update Form here with result
}

如何使用结果更新表单组件?

感谢您的帮助。

最佳答案

首先,我建议您多了解多线程。然后回过头来学习套接字。这两者都有相当陡峭的学习曲线,要解决这两个问题是很多要处理的。

也就是说,您可以通过 TaskScheduler.FromCurrentSynchronizationContext 捕获 UI 上下文并将 Task 调度到该 TaskScheduler 来发布对 UI 的更新>。如果 TPL 不可用,那么您可以直接使用 SynchronizationContext

关于c# - NetworkStream 开始读取/结束读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4399917/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com