如何在迭代中间暂停

时间:2016-08-25 10:23:34

标签: c# multithreading

我需要在迭代中间暂停一个循环(在while语句中的一系列命令中的任何点)。虽然我理解如何在迭代结束时使用事件句柄暂停,但我不确定如何在命令序列中实现类似的效果。

清晰的例子:

Thread 1 :

    while (true) 
    {
    // commands
    }

    Thread 2 : 

    Console.ReadLine();

//if 1 is pressed the first thread (Thread 1) must immediately pause.

非常感谢任何帮助。 P.S我是初学者,所以详细解释是非常宝贵的。

1 个答案:

答案 0 :(得分:3)

  

我不确定如何在命令序列中实现类似的效果。

简单地说:你不应该。除非你知道代码在任何时候正在做什么,否则你不应该试图打断它。当然,如果代码选择来调用相同的“虽然我理解如何使用事件句柄在迭代结束时暂停”逻辑在流程中间,那么很好 - 但这是用于运行代码来决定,而不是控制代码。暂停任意代码是打破事情的好方法,这就是为什么Thread.Suspend has been deprecated

完全有效:

while (true) 
{
    ElectivePauseIfNeeded();
    // ... some commands
    ElectivePauseIfNeeded();
    // ... some more commands
}

这里的要点是循环决定何时可以安全暂停,而不是外部代码。