茱莉蔻玫瑰护手霜:C#线程挂起的问题

来源:百度文库 编辑:九乡新闻网 时间:2024/07/07 16:09:04
在 .NET Framework 2.0 版中, Thread..::.Suspend 和 Thread..::.Resume 方法已标记为过时,并将从未来版本中移除。 还可以通过调用 Thread..::.Suspend 来暂停线程。当线程针对自身调用 Thread..::.Suspend 时,调用将会阻止,直到另一个线程继续该线程。当一个线程针对另一个线程调用 Thread..::.Suspend 时,调用是非组阻止调用,这会导致另一线程暂停。无论调用了多少次 Thread..::.Resume ,调用 Thread..::.Suspend 均会使另一个线程脱离挂起状态,并导致该线程继续执行。例如,如果将 Thread..::.Suspend 连续调用五次,然后调用 Thread..::.Resume ,则该线程将在调用 Thread..::.Resume 后立即继续执行。与 Thread..::.Sleep 不同, Thread..::.Suspend 不会导致线程立即停止执行。公共语言运行库必须一直等待,直到线程到达安全点之后它才可以将该线程挂起。如果线程尚未启动或已经停止,则它将不能挂起。有关安全点的详细信息,请参见 Thread.Suspend、垃圾回收和安全点 。重要说明: Thread..::.Suspend 和 Thread..::.Resume 方法通常并不是对所有应用程序都有用,并且不应将其与同步机制混淆。由于 Thread..::.Suspend 和 Thread..::.Resume 不依赖于受控制线程的协作,因此,它们极具侵犯性并且会导致严重的应用程序问题,如死锁(例如,如果挂起的线程占有另一个线程需要的资源,就会发生这种情况)。 某些应用程序确实需要控制线程的优先级以提高性能。为了做到这一点,应该使用 Priority 属性而不是 Thread..::.Suspend 。
参考资料:http://msdn.microsoft.com/zh-cn/library/tttdef8x.aspx