将tcpstream输入粘贴到文本框

时间:2016-01-06 17:05:39

标签: c# multithreading tcp backgroundworker streamreader

所以我已经有一段时间了。

到达流的末尾时,程序会冻结,直到有新的输入只能再次冻结。

使用一个线程我得到了一个异常,我无法从该线程访问Textbox。 backgroundworker只是不做任何事情。

我真的有点迷失在这里

我的代码有点像这样

在管理tcp流的类中:     string readMessage()     {         return inputStream.ReadLine()     }

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

1 个答案:

答案 0 :(得分:0)

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()));
        }
    }

工作是线程调用的方法,而refresh是一个定时器调用的方法,它定期将主线程设置为静止,以便其他线程可以完成它的工作

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

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