2
看看这个简单的类:线程没有完成
delegate void Log(String message);
class A {
public Log log;
...
public void test() {
// Empty
}
}
现在我创建和启动从主界面线程线程并检查它是否结束。
A a = new A();
a.log += Log;
Thread t = new Thread(new ThreadStart(a.test));
t.Start();
while(true) {
System.Threading.Thread.Sleep(200);
Console.WriteLine(t.IsAlive);
}
通过上面的一切,代码工作正常:
true
true
....
false
false
false
...
现在,当我的test
方法的代码更改为
public void test() {
log("Test");
}
在GUI类的Log
方法看起来像这个:
private void Log(String message)
{
if (this.tb_log.InvokeRequired)
{
this.tb_log.Invoke((MethodInvoker)delegate()
{
Log(message);
});
}
else
{
// do something with the textbox in the GUI
}
}
现在,虽然功能终止我得到以下控制台日志:
true
true
true
true
true
true
...
线程永远不会终止。你能解释一下吗?
您可以使用'BeginInvoke'来检查问题是否仍然存在? – ChrisK
明显的建议是,它是递归调用自己永远。 – Jeremy
我不确定,只是一个假设 - 您正试图在无限循环中的GUI线程上调用方法。所以你的this.tb_log.Invoke调用永远不会结束 –