所以我已经有一段时间了。
到达流的末尾时,程序会冻结,直到有新的输入只能再次冻结。
使用一个线程我得到了一个异常,我无法从该线程访问Textbox。 backgroundworker只是不做任何事情。
我真的有点迷失在这里
我的代码有点像这样
在管理tcp流的类中: string readMessage() { return inputStream.ReadLine() }
在我的Windows窗体类中我需要以某种方式继续使用输入流更新文本框而不冻结ui
答案 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一起工作,将超时设置为几毫秒,并且每秒只更新一次聊天,但它仍然感觉真的没有响应。 有没有办法让它在后台运行更顺畅?因为我还必须在运行时工作并响应输入。