如何检查Thread是否完成执行

Bog*_*ogi 33 c# multithreading thread-state

我有以下问题:

我想检查(C#)线程是否已完成执行,即线程方法是否已返回.我现在所做的就是打电话Thread.Join(1),但这会延迟1毫秒.有没有办法简单地检查线程是否已完成.检查Thread.ThreadState似乎太麻烦了.

Moh*_*vel 59

使用Thread.IsAlive标志.这是给出线程状态.


sha*_*aja 11

如果您不想通过等待/检查其他正在运行的线程完成来阻止当前线程,则可以实现这样的回调方法。

Action onCompleted = () => 
{  
    //On complete action
};

var thread = new Thread(
  () =>
  {
    try
    {
      // Do your work
    }
    finally
    {
      onCompleted();
    }
  });
thread.Start();
Run Code Online (Sandbox Code Playgroud)

如果你正在处理不支持跨线程操作的控件,那么你必须调用回调方法

this.Invoke(onCompleted);
Run Code Online (Sandbox Code Playgroud)


Chr*_*isF 10

您可以在完成并订阅该事件时从您的线程中触发事件.

或者你可以Thread.Join()不带任何参数调用:

阻塞调用线程直到线程终止,同时继续执行标准COM和SendMessage抽取.

Thread.Join(1) 将:

阻塞调用线程,直到线程终止或指定的时间过去,同时继续执行标准COM和SendMessage抽取.

在这种情况下,指定的时间是1毫秒.

  • 在调用Thread.Join()之前,应始终检查当前线程是否与您要加入的线程不同.否则你永远不会回来. (4认同)

Dan*_*ose 10

对于一个线程,你myThread.IsAlive有财产.如果返回线程方法或线程被中止,则为false.


Bri*_*eon 7

使用Thread.Join(TimeSpan.Zero) 它不会阻止调用者并返回一个值,指示线程是否已完成其工作.顺便说一下,这也是测试所有WaitHandle类的标准方法.