活动后线程未完成

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了活动后线程未完成相关的知识,希望对你有一定的参考价值。

看看这个简单的类:

delegate void Log(String message);
class A {
  public Log log;

  ...

  public void test() {
    // Empty
  }

}

现在我从主GUI线程创建并启动一个线程,并检查它是否结束。

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
...

线程永远不会终止。你能解释一下吗?

以上是关于活动后线程未完成的主要内容,如果未能解决你的问题,请参考以下文章

如何重新附加片段(片段未附加到活动 Kotlin)

Android Studio 内存泄漏活动未在线程中完成

使用意图共享后,片段未恢复其活动

FragmentStatePagerAdapter视图分页器片段在重新创建活动后未显示

更改语言环境后未调用 onConfigurationChange

getSupportFragmentManager() 在活动扩展片段中未定义