2011-12-21 42 views
1

调用之前:如何等待ThreadState.Abort?

th.Abort(); 

我怎么能等待ThreadStateThreadState.Abort,然后执行的东西吗? 这可能吗?

+0

@HansPassant - 确定您可以 - 您可以启动另一个线程来执行等待,然后调用Abort()。 – 2011-12-21 01:12:44

+0

@MartinJames:我以为。但我把它作为我列表中的最后一个解决方案.. – 2011-12-21 01:16:03

+0

我写它并将其作为当前解决方案粘贴到此处。 – 2011-12-21 01:19:01

回答

3

您可以调用Thread.Join()(MSDN)。像这样:

th.Abort(); 
th.Join(); 

对Join()的调用将导致调用线程在继续之前等待该线程终止。

此外,你可能不应该调用Thread.Abort()如果你的工作线程正在与其他任何东西进行交互。

+0

但是,如果用户想要停止该过程?我怎么做没有调用.Abort()方法? – 2011-12-21 13:37:28

+0

最简单的事情就是使用已经取消了取消的BackgroundWorker。请参阅http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx。 Thread.Abort()是杀死线程的一种蛮力方式,只有在您确定在该线程的任何时刻不会产生异常的副作用时才适用。 – 2011-12-21 17:16:22

1

您可以制作一个小循环等待线程中止。

th.Abort(); 
while (th.ThreadState.HasFlag(ThreadState.Aborted)) 
    Thread.Sleep(0); 
// Thread is aborted. 
+0

它的这种可能性永远不会退出循环?更好地使用'.HasFlag'来代替? – 2011-12-21 13:44:57

+0

好点!我没有意识到ThreadState是一个Flags枚举。上面编辑。 – 2011-12-21 21:24:23