将tcpstream输入粘贴到文本框中
问题描述:
所以我已经使用了一段时间了。将tcpstream输入粘贴到文本框中
达到流的末尾程序冻结,直到有新的输入只能再次冻结。
使用线程我得到了我无法从该线程访问文本框的异常。背景工作者只是没有做任何事情。
我真的有点丢在这里
我的代码有点看起来像在管理的TCP流的类此
: 串readMessage(){ 回报 inputStream.ReadLine() }
在我的窗体窗体类我需要以某种方式不断冻结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()));
}
}
工作是由线程调用的方法,同时刷新是由一种叫做方法定时器周期性地设置主线程休息,所以另一个线程可以做它的工作
它让它运行...直到它到达当前流的结尾并再次冻结,直到有一个新的输入它快速写入文本框并再次冻结,这正是我不想要的。
编辑:我设法让它与tcp.SenderTimeout一起工作,将超时设置为几个毫秒,并且只更新一次聊天,但仍然感觉真的没有响应。 有没有办法让它在后台运行更平滑?因为Ill还必须在运行时工作并响应输入。
没有人能够帮助你,因为我们不知道你在说什么。向我们展示一些代码,描述您正在尝试执行的操作,提出一个问题...... – pm100
假设您使用WinForms,如果要更改其他线程的UI组件状态,则需要使用Invoke(Delegate方法)而不是创建UI组件的线程。你可以使用InvokeRequired来检查你是否需要使用Invoke() – Yoztastic
这该死的格式化删除了我的代码 – user3717941