C# 将tcpstream输入粘贴到文本框

C# 将tcpstream输入粘贴到文本框,c#,multithreading,tcp,backgroundworker,streamreader,C#,Multithreading,Tcp,Backgroundworker,Streamreader,所以我已经做了一段时间了 到达流的末尾时,程序冻结,直到有新的输入才再次冻结 使用一个线程,我得到一个例外,我不能从该线程访问文本框。后台工作人员什么都不做 我真的有点迷路了 我的代码有点像这样 在管理tcp流的类中: 字符串readMessage() { 返回inputStream.ReadLine() } 在我的windows窗体类中,我需要以某种方式使用输入流不断更新文本框,而不冻结ui public string readMessage() { string me

所以我已经做了一段时间了

到达流的末尾时,程序冻结,直到有新的输入才再次冻结

使用一个线程,我得到一个例外,我不能从该线程访问文本框。后台工作人员什么都不做

我真的有点迷路了

我的代码有点像这样

在管理tcp流的类中: 字符串readMessage() { 返回inputStream.ReadLine() }

在我的windows窗体类中,我需要以某种方式使用输入流不断更新文本框,而不冻结ui

public string readMessage()
    {
        string message;
        message = inputStream.ReadLine();
        return message;
    }
这就是处理tcp流的方法

现在在我的主窗体类中,它如下所示:

void Refresh(object sender, EventArgs e)
    {
        Thread.Sleep(1000);
        n+=1;
        label1.Text = Convert.ToString(n);
    }

    public void update()
    {
        Channel.AppendText(irc.readMessage());
    }
    void WORK()
    {
        while(true)
        {
            Channel.Invoke(new MethodInvoker(() => update()));
        }
    }
Work是由线程调用的方法,而refresh是由计时器调用的方法,计时器周期性地将主线程设置为rest,以便其他线程可以完成它的工作

让它运行起来。。。直到它到达当前流的末尾并再次冻结,直到流中有一个新的输入,它会快速写入文本框并再次冻结,这正是我不想要的

编辑:我设法让它与tcp.SenderTimeout一起工作,将超时设置为几毫秒,并且每秒只更新一次聊天,但它仍然感觉没有响应。
有没有办法让它在后台运行得更平滑?因为我还必须在运行时工作并响应输入。

没有人能够帮助您,因为我们不知道您在说什么。向我们展示一些代码,描述您尝试执行的操作,问一个问题……假设您使用WinForms,如果您想从创建UI组件的线程以外的线程更改UI组件的状态,则需要使用Invoke(委托方法)。您可以使用InvokeRequired来检查是否需要使用Invoke()啊,该死的格式化删除了我的代码,因此我得到了从tcp streamreader返回字符串的方法“irc.readMessage()”。我在WindowsForm类中得到了我的线程“t”,我如何使用该调用将readmessage方法中的文本附加到我的文本框中?这实际上还不够,但使用类似这样的方法-invoke(newMethodInvoker(()=>action());其中,操作是您试图更改文本框中文本的任何代码。