Thread.Sleep 只能在断点下工作?

我有一个 Lua 脚本调用一个名为 "delay" 的方法,该方法调用以下内容:

public void Delay(int millisecondsTimeout)
{
     Thread.Sleep(millisecondsTimeout);
}

然而,当 Lua 脚本调用它时,它似乎忽略了这行代码,只是运行其余代码而不阻塞线程(脚本在不同的线程上运行)。

然而,当我在 Thread.Sleep 行上设置断点时,它按预期工作。

为什么会这样?这太奇怪了!

编辑: 这是我创建脚本线程的方式:

new Thread(() =>
                {
                    this.Script.DoFile(this.Path);
                }).Start();

我使用 lua.RegisterFunction 注册方法,它可以正常调用。

点赞
用户2947870
用户2947870

然而,当lua脚本调用它时,它似乎忽略了这行代码,只是运行其余的代码而没有阻塞线程(脚本在不同的线程上运行)。

如果脚本在不同的线程上运行,你应该在该线程上调用sleep。如果你调用 Thread.Sleep,它会睡眠当前执行的线程。例子:

线程A -> 开始线程B

  • 如果在线程A中调用 Thread.Sleep,将会睡眠线程A,而不是线程B。

由于你的线程代码中没有循环,将无法在线程B中调用 Thread.Sleep

解决这个问题的一个可能的办法是从主线程中挂起后台线程。

myBackgroundThread = new Thread(() => //myBackgroundThread 是一个私有变量。
            {
                this.Script.DoFile(this.Path);
            }).Start();

然后从主线程中:

myBackgroundThread.Suspend();
Thread.Sleep(ms);
myBackgroundThread.Resume()
2014-07-24 20:56:21