C# 网络流开始/结束读取

C# 网络流开始/结束读取,c#,winforms,tcp,tcpclient,C#,Winforms,Tcp,Tcpclient,我对C#编程非常陌生,我正在开发一个基于TcpClient的应用程序 我想知道如何使用BeginRead和EndRead,我已经阅读了MSN文档,但没有帮助 我有这个: 如何使用结果更新表单组件 谢谢您的帮助。首先,我建议您多多学习多线程。然后回来学习套接字。这两个问题都有相当陡峭的学习曲线,要解决这两个问题需要处理很多事情 也就是说,您可以通过TaskScheduler.FromCurrentSynchronizationContext捕获UI上下文,并将任务调度到该TaskScheduler

我对C#编程非常陌生,我正在开发一个基于TcpClient的应用程序

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

我有这个:

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


谢谢您的帮助。

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


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

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


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

我已经阅读了有关SynchronizationContext的更多信息,效果非常好,谢谢!将阅读更多关于这两个方面的内容,谢谢:)我已经阅读了更多关于SynchronizationContext的内容,效果非常好,谢谢!我在这里遇到了同样的问题,我想知道在你插入评论行更新表单的地方引发一个事件是否合适。从表单订阅事件并更新它的内容?或者它是在单独的线程中,并且会导致一些问题?谢谢。我在这里也遇到了同样的问题,我想知道是否可以在您插入注释行以更新表单的地方引发事件。从表单订阅事件并更新它的内容?或者它是在单独的线程中,并且会导致一些问题?谢谢
    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
    }