将tcpstream输入粘贴到文本框中

问题描述:

所以我已经使用了一段时间了。将tcpstream输入粘贴到文本框中

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

使用线程我得到了我无法从该线程访问文本框的异常。背景工作者只是没有做任何事情。

我真的有点丢在这里

我的代码有点看起来像在管理的TCP流的类此

: 串readMessage(){ 回报 inputStream.ReadLine() }

在我的窗体窗体类我需要以某种方式不断冻结UI用输入流更新文本框

+0

没有人能够帮助你,因为我们不知道你在说什么。向我们展示一些代码,描述您正在尝试执行的操作,提出一个问题...... – pm100

+0

假设您使用WinForms,如果要更改其他线程的UI组件状态,则需要使用Invoke(Delegate方法)而不是创建UI组件的线程。你可以使用InvokeRequired来检查你是否需要使用Invoke() – Yoztastic

+0

这该死的格式化删除了我的代码 – user3717941

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

工作是由线程调用的方法,同时刷新是由一种叫做方法定时器周期性地设置主线程休息,所以另一个线程可以做它的工作

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

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