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

本文关键字:方法 是什么 net 线程 启动 等待 | 更新日期: 2023-09-27 18:07:17

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

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

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

while (!oThread.IsAlive);

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

一些版主已经把这个标记为重复,但是他们引用的另一个问题没有提到任何关于IsAlive, DoEvents,或者正确的错误处理,如果线程启动失败。我的问题特别与我在问题中链接到的MSDN文章有关,它建议使用IsAlive的忙循环。

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

目前还没有官方的答案…你在MSDN上看到的是2003年的,这是相对较老的技术。对于你想做的,我会使用任务并行库(TPL)。这需要。net framework 4.0+。

关于如何使用TPL来满足您的需求的优秀教程,请参阅:

  1. n.

  2. J。c#中Albahari的Threading .

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

除了Killercam的回答之外,我还想指出链接页面上的示例代码是垃圾。看起来有人被告知"创建一个样本,只是显示所有不同的方法,我们在一个页面上"。结果是这样的

在执行线程时,几乎不会在轮询循环中等待。尤其是在紧张的情况下,还需要等待。它们使CPU发热,不可靠,如果你在那里设置睡眠,会有很高的延迟,有更好的方法来做到这一点。自旋回路是为那些在非常特定的情况下知道自己在做什么的专家准备的。

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

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