等待.NET线程启动的正确方法是什么?

时间:2013-04-02 17:35:10

标签: c# multithreading doevents

我在他们的线程教程中正在微软的网站上阅读以下内容:

http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx

MSDN建议使用以下内容等待线程变为活动:

while (!oThread.IsAlive);

这是推荐的等待方式吗?插入“DoEvents”调用以允许主线程保持响应更好吗?如果出现问题并且线程永远不会“活着”,应该如何处理错误?如果这是不好的做法,IsAlive最好何时使用?

一些主持人已将此标记为重复,但他们引用的另一个问题是,如果线程无法启动,则不会提及有关IsAlive,DoEvents或正确错误处理的任何内容。我的问题与我在我的问题中链接的MSDN文章以及使用与IsAlive的繁忙循环的建议有关。

2 个答案:

答案 0 :(得分:2)

看到还没有官方答案......你在MSDN上看到的是从2003年开始,这是相对古老的技术。对于你想做的事情,我会使用Task Parallel Library (TPL)。这需要.NET Framwork 4.0 +。

有关如何使用TPL的精彩教程,请参阅:

  1. Task Parallel 1 of n

  2. J. Albahari's Threading in C#

  3. 一旦你掌握了TPL,请随时回来寻找特别的问题。

    我希望这会有所帮助。

答案 1 :(得分:1)

除了Killercam的回答,我想指出链接页面上的示例代码是垃圾。看起来有人被告知“创建一个样本,只显示我们在一个页面上拥有的所有不同方法”。字面意思就是这样......

在进行线程处理时,您几乎不会在轮询循环中等待。特别是在没有任何等待的紧张之中。它们使CPU变热,不可靠,如果你在那里睡觉就有很高的延迟,并且有更好的方法来做到这一点。旋转循环适用于知道在特定情况下他们正在做什么的专家。

等待线程“活着”没有意义。为什么有人会在实际代码中执行此操作?这甚至不意味着你的线程proc已经开始执行(真的!它没有。)。

我建议你使用现代范例。 TPL是一个很好的起点。见Killercam的回答。