我的文本框出了问题
我有一个表示GUI线程的类和一个用于执行某些网络工作的工作线程的类,然后必须将日志添加到GUI线程中的文本框中,以便您可以看到后台发生的情况。
但是,我遇到的问题是GUI上没有任何反应,只有调用addLine()的调试信息才会出现在控制台中。
应该添加日志的方法addLine()被调用,但看起来AppendText()似乎什么都不做
我很确定这必须与线程有关,但我不确定如何解决这个问题。
以下是代码:
工作人员主题:
Form1 form = new Form1();
// This method gets called in the worker thread when a new log is available
private void HandleMessage(Log args)
{
// Using an instance of my form and calling the function addLine()
form.addLine(args.Message);
}
GUI线程:
// This method gets called from the worker thread
public void addLine(String line)
{
// Outputting debug information to the console to see if the function gets called, it does get called
Console.WriteLine("addLine called: " + line);
// Trying to append text to the textbox, console is the textbox variable
// This pretty much does nothing from the worker thread
// Accessing it from the GUI thread works just fine
console.AppendText("\r\n" + line);
// Scrolling to the end
console.SelectionStart = console.Text.Length;
console.ScrollToCaret();
}
我已尝试做一些Invoke的东西,但未能正确使用它 GUI要么自己锁定,要么继续无所事事。
答案 0 :(得分:8)
如果您不在UI线程上,则无法进入winforms UI。尝试:
console.Invoke((MethodInvoker)delegate {
console.AppendText("\r\n" + line);
console.SelectionStart = console.Text.Length;
console.ScrollToCaret();
});
将把它撞到UI线程上。