【发布时间】:2013-03-24 03:02:32
【问题描述】:
我在微软网站的线程教程中阅读了以下内容:
http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx
MSDN 建议使用以下方法等待线程变为活动状态:
while (!oThread.IsAlive);
这是推荐的等待方式吗?插入“DoEvents”调用以允许主线程保持响应会更好吗?如果出现问题并且线程永远不会“活着”,应该如何进行错误处理?如果这是不好的做法,什么时候最好使用 IsAlive?
一些版主已将此标记为重复,但他们引用的另一个问题没有提及有关 IsAlive、DoEvents 或线程无法启动时的正确错误处理的任何内容。我的问题与我在问题中链接到的 MSDN 文章及其建议使用 IsAlive 的繁忙循环特别相关。
【问题讨论】:
-
为什么需要等待线程存活?这是什么类型的应用程序? WinForms、WPF、Windows 服务、控制台、...
-
我认为理想的解决方案是让您的主线程继续其业务,而无需关心线程何时开始。您的具体情况有哪些具体要求?
-
一些微软的“教程”是……我该怎么说?现在有点过时了。特别是那个有一些我真的不想在教程中看到的东西。主线程通过
while (!oThread.IsAlive);进行忙碌等待,而不是使用ManualResetEvent之类的东西。也没有任何理由说明你为什么需要做这样的事情! -
@gonzobrains 是的,“不要这样做”是我的想法。 :) 你对正确的线程有多感兴趣?如果你愿意,我会挖出一个免费在线书籍的链接。
-
@gonzobrains:这是一个:albahari.com/threading 它甚至涵盖了 PLinq。我不认为它涵盖了新的 .Net 4.5 TPL。
标签: c# multithreading doevents