2

我在微软网站的线程教程中阅读了以下内容:

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

MSDN 建议使用以下方法等待线程变为活动状态:

while (!oThread.IsAlive);

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

一些版主已将此标记为重复,但他们引用的另一个问题没有提及有关 IsAlive、DoEvents 或线程无法启动时的正确错误处理的任何内容。我的问题与我在问题中链接到的 MSDN 文章及其建议使用 IsAlive 的繁忙循环特别相关。

4

2 回答 2

2

看到还没有官方的答案……你在 MSDN 上看到的是 2003 年的,这是比较老的技术。对于您想做的事情,我会使用Task Parallel Library (TPL)。这需要 .NET 框架 4.0+。

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

  1. n 的并行任务 1

  2. J. Albahari 在 C# 中的线程

一旦您掌握了 TPL,请随时返回并寻找提出特定问题。

我希望这有帮助。

于 2013-04-03T11:07:56.127 回答
1

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

在进行线程处理时,您几乎从不在轮询循环中等待。尤其是没有任何等待的紧张。它们会使 CPU 变热,不可靠,如果您在那里休眠,则具有高延迟,并且有更好的方法来做到这一点。自旋循环适用于知道他们在非常具体的情况下正在做什么的专家。

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

我建议你使用现代范式。TPL 是一个很好的起点。请参阅 Killercam 的答案。

于 2013-04-03T11:16:09.347 回答