如何在 C# 中立即暂停一个线程?

How to pause a thread at once in C#?

我使用 ManualResetEnvent pause/continue 线程。代码示例如下。

private _rstEvent = new ManualResetEvent(true);

public void DoSomeWork()
{
    while(judgementValue)
    {
        _rstEvent.WaitOne();
        ...
    }
}

public void Pause()
{
    _rstEvent.Reset();
}

public void Continue()
{
    _rstEvent.Set();
}

问题是如果while循环很大,这意味着while语句中的每个循环都有很多操作要做。该线程将继续进行,直到遇到下一个 _rstEvent.WaitOne();。除了已弃用的挂起之外,是否有立即暂停线程的方法?

SuspendAbort 等的问题是您正试图对另一个线程做某事,而这个线程实际上可能正在做 任何事情当时

反复观察到这会导致难以诊断错误,例如none 个当前线程可以获得锁,因为持有锁的线程已被挂起或中止,因此永远不会释放锁(也可以替换为任何其他资源)。

这就是为什么现代线程机制是围绕 cooperative 原语构建的,其中 线程本身 检查(在适当的时候)它是否被询问挂起或中止,并确保仅在不持有任何资源时才这样做。

您的循环代码没有理由不能在每次迭代中多次检查事件,只要合适。