我有以下问题:

我想检查(c#)如果线程完成执行,则IE如果线程方法返回。我现在要做的就是打电话 Thread.Join(1), ,但这给出了1 ms延迟。有什么方法可以简单地检查线程是否完成。检查 Thread.ThreadState 似乎太麻烦了。

有帮助吗?

解决方案

使用 Thread.IsAlive 旗帜。这是为了给出线程状态。

其他提示

您可以在完成并订阅该事件时从线程中启动事件。

或者您可以致电 Thread.Join() 没有任何论点:

阻止调用线程直到线程终止,同时继续执行标准com和sendmessage泵送。

Thread.Join(1) 将要:

阻止调用线程,直到线程终止或指定的时间段,同时继续执行标准的com和sendmessage泵送。

在这种情况下,指定的时间为1毫秒。

对于线程,您有 myThread.IsAlive 财产。如果返回的线程方法或线程中止,则是错误的。

采用 Thread.Join(TimeSpan.Zero) 它不会阻止呼叫者并返回一个值,以指示线程是否已完成其工作。顺便说一句,这是测试所有的标准方式 WaitHandle 课程。

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

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

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

如果您要处理不支持跨线程操作的控件,则必须调用回调方法

this.Invoke(onCompleted);

我广泛使用isalive,除非我想阻止当前执行(呼叫线程),在这种情况下,我只会在没有参数的情况下调用join()。现在,请注意,如果目标线程实际上尚未出于任何原因,Isalive可能会返回false。

卡洛斯·梅里格(Carlos Merighe)。

看一眼 背景工作者类, ,与 努力完成 你能行的。

这取决于您要如何使用它。使用联接是一种方法。另一种方法是让线程通过使用事件通知线程的呼叫者。例如,当您具有图形用户界面(GUI)线程,该线程调用一个过程,该过程运行了一段时间,并且需要在完成后更新GUI时,您可以使用该事件来执行此操作。该网站使您了解如何处理活动:

http://msdn.microsoft.com/en-us/library/aa645739%28vs.71%29.aspx

请记住,这将导致跨线程操作,如果您想从另一个线程更新GUI,则必须使用 Invoke 您要更新的控件方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top