我注意到在使用Monogame框架时,当游戏停止绘制时线程不会暂停。比如移动窗户。当玩家看不到游戏时,这是一个小问题;使用任务时,这是一个更大的问题。
那么当游戏窗口暂停或没有绘制时,如何暂停所有线程?
答案 0 :(得分:0)
有人会建议Thread.Suspend。不要使用它,它可以在很难测试的方式打破你的游戏。它可能会暂停System.String或其他重要类的静态ctor。一切都锁定了。这很难测试,所以你很可能会在一个令人惊讶的时间发现它。
暂停线程必须是合作的。一个简单的方法是让所有线程定期等待的事件。如果您想暂停,请取消设置事件:
static readonly AutoResetEvent evt = new ...;
//...
while (...) { //some game loop
evt.WaitOne();
DoWork();
}
This has been made into a nice PauseToken
class.
如果问题中有一些代码和更多上下文,那么给出一个好答案会更容易。但这应该让你开始合作暂停线程的想法。