我需要在迭代中间暂停一个循环(在while语句中的一系列命令中的任何点)。虽然我理解如何在迭代结束时使用事件句柄暂停,但我不确定如何在命令序列中实现类似的效果。
清晰的例子:
Thread 1 :
while (true)
{
// commands
}
Thread 2 :
Console.ReadLine();
//if 1 is pressed the first thread (Thread 1) must immediately pause.
非常感谢任何帮助。 P.S我是初学者,所以详细解释是非常宝贵的。
答案 0 :(得分:3)
我不确定如何在命令序列中实现类似的效果。
简单地说:你不应该。除非你知道代码在任何时候正在做什么,否则你不应该试图打断它。当然,如果代码选择来调用相同的“虽然我理解如何使用事件句柄在迭代结束时暂停”逻辑在流程中间,那么很好 - 但这是用于运行代码来决定,而不是控制代码。暂停任意代码是打破事情的好方法,这就是为什么Thread.Suspend
has been deprecated。
但此完全有效:
while (true)
{
ElectivePauseIfNeeded();
// ... some commands
ElectivePauseIfNeeded();
// ... some more commands
}
这里的要点是循环决定何时可以安全暂停,而不是外部代码。